mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Move rewriting of path earlier in the argument handling as other things depend on the path
This commit is contained in:
parent
021f33e063
commit
0442efd33a
1 changed files with 21 additions and 13 deletions
|
@ -159,6 +159,27 @@ def _ansible_excepthook(exc_type, exc_value, tb):
|
|||
|
||||
def additional_parameter_handling(params):
|
||||
"""Additional parameter validation and reformatting"""
|
||||
# When path is a directory, rewrite the pathname to be the file inside of the directory
|
||||
# TODO: Why do we exclude link? Why don't we exclude directory? Should we exclude touch?
|
||||
# I think this is where we want to be in the future:
|
||||
# when isdir(path):
|
||||
# if state == absent: Remove the directory
|
||||
# if state == touch: Touch the directory
|
||||
# if state == directory: Assert the directory is the same as the one specified
|
||||
# if state == file: place inside of the directory (use _original_basename)
|
||||
# if state == link: place inside of the directory (use _original_basename. Fallback to src?)
|
||||
# if state == hard: place inside of the directory (use _original_basename. Fallback to src?)
|
||||
if (params['state'] not in ("link", "absent") and os.path.isdir(to_bytes(params['path'], errors='surrogate_or_strict'))):
|
||||
basename = None
|
||||
|
||||
if params['_original_basename']:
|
||||
basename = params['_original_basename']
|
||||
elif params['src']:
|
||||
basename = os.path.basename(params['src'])
|
||||
|
||||
if basename:
|
||||
params['path'] = os.path.join(params['path'], basename)
|
||||
|
||||
# state should default to file, but since that creates many conflicts,
|
||||
# default state to 'current' when it exists.
|
||||
prev_state = get_state(to_bytes(params['path'], errors='surrogate_or_strict'))
|
||||
|
@ -186,19 +207,6 @@ def additional_parameter_handling(params):
|
|||
# raise ParameterError(results={"msg": "src option requires state to be 'link' or 'hard'",
|
||||
# "path": params["path"]})
|
||||
|
||||
# When path is a directory, rewrite the pathname to be the file inside of the directory
|
||||
# TODO: Why do we exclude link? Why don't we exclude directory? Should we exclude touch?
|
||||
if (params['state'] not in ("link", "absent") and os.path.isdir(to_bytes(params['path'], errors='surrogate_or_strict'))):
|
||||
basename = None
|
||||
|
||||
# _original_basename is used by other modules that depend on file to construct a correct
|
||||
# destination path when the destination path was a directory
|
||||
if params['_original_basename']:
|
||||
basename = params['_original_basename']
|
||||
|
||||
if basename:
|
||||
params['path'] = params['path'] = os.path.join(params['path'], basename)
|
||||
|
||||
|
||||
def get_state(path):
|
||||
''' Find out current state '''
|
||||
|
|
Loading…
Reference in a new issue