Add remote_src param for unarchive to deprecate copy param

From ansible/ansible#10218
This commit is contained in:
James Cammarata 2016-07-14 11:24:23 -05:00 committed by Matt Clay
parent 92ac734e13
commit aa1e9e3d5f

View file

@ -28,12 +28,12 @@ version_added: 1.4
short_description: Unpacks an archive after (optionally) copying it from the local machine. short_description: Unpacks an archive after (optionally) copying it from the local machine.
extends_documentation_fragment: files extends_documentation_fragment: files
description: description:
- The M(unarchive) module unpacks an archive. By default, it will copy the source file from the local system to the target before unpacking - set copy=no to unpack an archive which already exists on the target.. - The M(unarchive) module unpacks an archive. By default, it will copy the source file from the local system to the target before unpacking - set remote_src=yes to unpack an archive which already exists on the target..
options: options:
src: src:
description: description:
- If copy=yes (default), local path to archive file to copy to the target server; can be absolute or relative. If copy=no, path on the target server to existing archive file to unpack. - If remote_src=no (default), local path to archive file to copy to the target server; can be absolute or relative. If remote_src=yes, path on the target server to existing archive file to unpack.
- If copy=no and src contains ://, the remote machine will download the file from the url first. (version_added 2.0) - If remote_src=yes and src contains ://, the remote machine will download the file from the url first. (version_added 2.0)
required: true required: true
default: null default: null
dest: dest:
@ -44,6 +44,8 @@ options:
copy: copy:
description: description:
- "If true, the file is copied from local 'master' to the target machine, otherwise, the plugin will look for src archive at the target machine." - "If true, the file is copied from local 'master' to the target machine, otherwise, the plugin will look for src archive at the target machine."
- "This option has been deprecated in favor of C(remote_src)"
- "This option is mutually exclusive with C(remote_src)."
required: false required: false
choices: [ "yes", "no" ] choices: [ "yes", "no" ]
default: "yes" default: "yes"
@ -78,6 +80,14 @@ options:
default: default:
required: false required: false
version_added: "2.1" version_added: "2.1"
remote_src:
description:
- "Set to C(yes) to indicate the archived file is already on the remote system and not local to the Ansible controller."
- "This option is mutually exclusive with C(copy)."
required: false
default: "no"
choices: ["yes", "no"]
version_added: "2.2"
validate_certs: validate_certs:
description: description:
- This only applies if using a https url as the source of the file. - This only applies if using a https url as the source of the file.
@ -108,10 +118,10 @@ EXAMPLES = '''
- unarchive: src=foo.tgz dest=/var/lib/foo - unarchive: src=foo.tgz dest=/var/lib/foo
# Unarchive a file that is already on the remote machine # Unarchive a file that is already on the remote machine
- unarchive: src=/tmp/foo.zip dest=/usr/local/bin copy=no - unarchive: src=/tmp/foo.zip dest=/usr/local/bin remote_src=yes
# Unarchive a file that needs to be downloaded (added in 2.0) # Unarchive a file that needs to be downloaded (added in 2.0)
- unarchive: src=https://example.com/example.zip dest=/usr/local/bin copy=no - unarchive: src=https://example.com/example.zip dest=/usr/local/bin remote_src=yes
''' '''
import re import re
@ -699,7 +709,8 @@ def main():
src = dict(required=True, type='path'), src = dict(required=True, type='path'),
original_basename = dict(required=False, type='str'), # used to handle 'dest is a directory' via template, a slight hack original_basename = dict(required=False, type='str'), # used to handle 'dest is a directory' via template, a slight hack
dest = dict(required=True, type='path'), dest = dict(required=True, type='path'),
copy = dict(default=True, type='bool'), copy = dict(required=False, default=True, type='bool'),
remote_src = dict(required=False, default=False, type='bool'),
creates = dict(required=False, type='path'), creates = dict(required=False, type='path'),
list_files = dict(required=False, default=False, type='bool'), list_files = dict(required=False, default=False, type='bool'),
keep_newer = dict(required=False, default=False, type='bool'), keep_newer = dict(required=False, default=False, type='bool'),
@ -708,6 +719,7 @@ def main():
validate_certs = dict(required=False, default=True, type='bool'), validate_certs = dict(required=False, default=True, type='bool'),
), ),
add_file_common_args = True, add_file_common_args = True,
mutually_exclusive = [("copy", "remote_src"),]
# check-mode only works for zip files # check-mode only works for zip files
#supports_check_mode = True, #supports_check_mode = True,
) )
@ -718,10 +730,11 @@ def main():
src = os.path.expanduser(module.params['src']) src = os.path.expanduser(module.params['src'])
dest = os.path.expanduser(module.params['dest']) dest = os.path.expanduser(module.params['dest'])
copy = module.params['copy'] copy = module.params['copy']
remote_src = module.params['remote_src']
file_args = module.load_file_common_arguments(module.params) file_args = module.load_file_common_arguments(module.params)
# did tar file arrive? # did tar file arrive?
if not os.path.exists(src): if not os.path.exists(src):
if copy: if not remote_src or copy:
module.fail_json(msg="Source '%s' failed to transfer" % src) module.fail_json(msg="Source '%s' failed to transfer" % src)
# If copy=false, and src= contains ://, try and download the file to a temp directory. # If copy=false, and src= contains ://, try and download the file to a temp directory.
elif '://' in src: elif '://' in src: