diff --git a/lib/ansible/modules/files/synchronize.py b/lib/ansible/modules/files/synchronize.py index fb9faf0c2a9..b997afab203 100644 --- a/lib/ansible/modules/files/synchronize.py +++ b/lib/ansible/modules/files/synchronize.py @@ -1,5 +1,6 @@ #!/usr/bin/python # -*- coding: utf-8 -*- + # Copyright: (c) 2012-2013, Timothy Appnel # Copyright: (c) 2017, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) @@ -11,7 +12,6 @@ ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'core'} - DOCUMENTATION = ''' --- module: synchronize @@ -40,100 +40,84 @@ options: description: - Specify the direction of the synchronization. In push mode the localhost or delegate is the source; In pull mode the remote host in context is the source. - required: false - choices: [ 'push', 'pull' ] - default: 'push' + choices: [ pull, push ] + default: push archive: description: - Mirrors the rsync archive flag, enables recursive, links, perms, times, owner, group flags and -D. - choices: [ 'yes', 'no' ] + type: bool default: 'yes' - required: false checksum: description: - Skip based on checksum, rather than mod-time & size; Note that that "archive" option is still enabled by default - the "checksum" option will not disable it. - choices: [ 'yes', 'no' ] + type: bool default: 'no' - required: false version_added: "1.6" compress: description: - Compress file data during the transfer. In most cases, leave this enabled unless it causes problems. - choices: [ 'yes', 'no' ] + type: bool default: 'yes' - required: false version_added: "1.7" existing_only: description: - Skip creating new files on receiver. - choices: [ 'yes', 'no' ] + type: bool default: 'no' - required: false version_added: "1.5" delete: description: - Delete files in C(dest) that don't exist (after transfer, not before) in the C(src) path. This option requires C(recursive=yes). - choices: [ 'yes', 'no' ] + type: bool default: 'no' - required: false dirs: description: - Transfer directories without recursing - choices: [ 'yes', 'no' ] + type: bool default: 'no' - required: false recursive: description: - Recurse into directories. - choices: [ 'yes', 'no' ] + type: bool default: the value of the archive option - required: false links: description: - Copy symlinks as symlinks. - choices: [ 'yes', 'no' ] + type: bool default: the value of the archive option - required: false copy_links: description: - Copy symlinks as the item that they point to (the referent) is copied, rather than the symlink. - choices: [ 'yes', 'no' ] + type: bool default: 'no' - required: false perms: description: - Preserve permissions. - choices: [ 'yes', 'no' ] + type: bool default: the value of the archive option - required: false times: description: - Preserve modification times - choices: [ 'yes', 'no' ] + type: bool default: the value of the archive option - required: false owner: description: - Preserve owner (super user only) - choices: [ 'yes', 'no' ] + type: bool default: the value of the archive option - required: false group: description: - Preserve group - choices: [ 'yes', 'no' ] + type: bool default: the value of the archive option - required: false rsync_path: description: - Specify the rsync command to run on the remote host. See C(--rsync-path) on the rsync man page. - required: false rsync_timeout: description: - Specify a --timeout for the rsync command in seconds. default: 0 - required: false set_remote_user: description: - put user@ for the remote paths. If you have a custom ssh config to define the remote user for a host @@ -142,28 +126,25 @@ options: use_ssh_args: description: - Use the ssh_args specified in ansible.cfg - default: "no" - choices: - - "yes" - - "no" + type: bool + default: 'no' version_added: "2.0" rsync_opts: description: - Specify additional rsync options by passing in an array. default: - required: false version_added: "1.6" partial: description: - Tells rsync to keep the partial file which should make a subsequent transfer of the rest of the file much faster. - default: no - required: false + type: bool + default: 'no' version_added: "2.0" verify_host: description: - Verify destination host key. - default: no - required: false + type: bool + default: 'no' version_added: "2.0" notes: - rsync must be installed on both the local and remote host. @@ -191,99 +172,100 @@ notes: - The C(synchronize) module forces `--delay-updates` to avoid leaving a destination in a broken in-between state if the underlying rsync process encounters an error. Those synchronizing large numbers of files that are willing to trade safety for performance should call rsync directly. -author: "Timothy Appnel (@tima)" +author: +- Timothy Appnel (@tima) ''' EXAMPLES = ''' -# Synchronization of src on the control machine to dest on the remote hosts -- synchronize: +- name: Synchronization of src on the control machine to dest on the remote hosts + synchronize: src: some/relative/path dest: /some/absolute/path -# Synchronization using rsync protocol (push) -- synchronize: +- name: Synchronization using rsync protocol (push) + synchronize: src: some/relative/path/ dest: rsync://somehost.com/path/ -# Synchronization using rsync protocol (pull) -- synchronize: +- name: Synchronization using rsync protocol (pull) + synchronize: mode: pull src: rsync://somehost.com/path/ dest: /some/absolute/path/ -# Synchronization using rsync protocol on delegate host (push) -- synchronize: +- name: Synchronization using rsync protocol on delegate host (push) + synchronize: src: /some/absolute/path/ dest: rsync://somehost.com/path/ delegate_to: delegate.host -# Synchronization using rsync protocol on delegate host (pull) -- synchronize: +- name: Synchronization using rsync protocol on delegate host (pull) + synchronize: mode: pull src: rsync://somehost.com/path/ dest: /some/absolute/path/ delegate_to: delegate.host -# Synchronization without any --archive options enabled -- synchronize: +- name: Synchronization without any --archive options enabled + synchronize: src: some/relative/path dest: /some/absolute/path archive: no -# Synchronization with --archive options enabled except for --recursive -- synchronize: +- name: Synchronization with --archive options enabled except for --recursive + synchronize: src: some/relative/path dest: /some/absolute/path recursive: no -# Synchronization with --archive options enabled except for --times, with --checksum option enabled -- synchronize: +- name: Synchronization with --archive options enabled except for --times, with --checksum option enabled + synchronize: src: some/relative/path dest: /some/absolute/path checksum: yes times: no -# Synchronization without --archive options enabled except use --links -- synchronize: +- name: Synchronization without --archive options enabled except use --links + synchronize: src: some/relative/path dest: /some/absolute/path archive: no links: yes -# Synchronization of two paths both on the control machine -- synchronize: +- name: Synchronization of two paths both on the control machine + synchronize: src: some/relative/path dest: /some/absolute/path delegate_to: localhost -# Synchronization of src on the inventory host to the dest on the localhost in pull mode -- synchronize: +- name: Synchronization of src on the inventory host to the dest on the localhost in pull mode + synchronize: mode: pull src: some/relative/path dest: /some/absolute/path -# Synchronization of src on delegate host to dest on the current inventory host. -- synchronize: +- name: Synchronization of src on delegate host to dest on the current inventory host. + synchronize: src: /first/absolute/path dest: /second/absolute/path delegate_to: delegate.host -# Synchronize two directories on one remote host. -- synchronize: +- name: Synchronize two directories on one remote host. + synchronize: src: /first/absolute/path dest: /second/absolute/path delegate_to: "{{ inventory_hostname }}" -# Synchronize and delete files in dest on the remote host that are not found in src of localhost. -- synchronize: +- name: Synchronize and delete files in dest on the remote host that are not found in src of localhost. + synchronize: src: some/relative/path dest: /some/absolute/path delete: yes recursive: yes -# Synchronize using an alternate rsync command # This specific command is granted su privileges on the destination -- synchronize: +- name: Synchronize using an alternate rsync command + synchronize: src: some/relative/path dest: /some/absolute/path rsync_path: "su -c rsync" @@ -293,8 +275,8 @@ EXAMPLES = ''' # - /var # exclude any path starting with 'var' starting at the source directory # + /var/conf # include /var/conf even though it was previously excluded -# Synchronize passing in extra rsync options -- synchronize: +- name: Synchronize passing in extra rsync options + synchronize: src: /tmp/helloworld dest: /var/www/helloworld rsync_opts: @@ -348,36 +330,36 @@ def is_rsh_needed(source, dest): def main(): module = AnsibleModule( - argument_spec = dict( - src = dict(required=True), - dest = dict(required=True), - dest_port = dict(default=None, type='int'), - delete = dict(default='no', type='bool'), - private_key = dict(type='path', default=None), - rsync_path = dict(default=None), - _local_rsync_path = dict(default='rsync', type='path'), - _substitute_controller = dict(default='no', type='bool'), - archive = dict(default='yes', type='bool'), - checksum = dict(default='no', type='bool'), - compress = dict(default='yes', type='bool'), - existing_only = dict(default='no', type='bool'), - dirs = dict(default='no', type='bool'), - recursive = dict(type='bool'), - links = dict(type='bool'), - copy_links = dict(default='no', type='bool'), - perms = dict(type='bool'), - times = dict(type='bool'), - owner = dict(type='bool'), - group = dict(type='bool'), - set_remote_user = dict(default='yes', type='bool'), - rsync_timeout = dict(type='int', default=0), - rsync_opts = dict(type='list'), - ssh_args = dict(type='str'), - partial = dict(default='no', type='bool'), - verify_host = dict(default='no', type='bool'), - mode = dict(default='push', choices=['push', 'pull']), + argument_spec=dict( + src=dict(required=True), + dest=dict(required=True), + dest_port=dict(type='int'), + delete=dict(type='bool', default=False), + private_key=dict(type='path'), + rsync_path=dict(type='str'), + _local_rsync_path=dict(type='path', default='rsync'), + _substitute_controller=dict(type='bool', default=False), + archive=dict(type='bool', default=True), + checksum=dict(type='bool', default=False), + compress=dict(type='bool', default=True), + existing_only=dict(type='bool', default=False), + dirs=dict(type='bool', default=False), + recursive=dict(type='bool'), + links=dict(type='bool'), + copy_links=dict(type='bool', default=False), + perms=dict(type='bool'), + times=dict(type='bool'), + owner=dict(type='bool'), + group=dict(type='bool'), + set_remote_user=dict(type='bool', default=True), + rsync_timeout=dict(type='int', default=0), + rsync_opts=dict(type='list'), + ssh_args=dict(type='str'), + partial=dict(type='bool', default=False), + verify_host=dict(type='bool', default=False), + mode=dict(type='str', default='push', choices=['pull', 'push']), ), - supports_check_mode = True + supports_check_mode=True, ) if module.params['_substitute_controller']: @@ -504,20 +486,20 @@ def main(): (rc, out, err) = module.run_command(cmd) if rc: return module.fail_json(msg=err, rc=rc, cmd=cmdstr) - else: - changed = changed_marker in out - out_clean = out.replace(changed_marker, '') - out_lines = out_clean.split('\n') - while '' in out_lines: - out_lines.remove('') - if module._diff: - diff = {'prepared': out_clean} - return module.exit_json(changed=changed, msg=out_clean, - rc=rc, cmd=cmdstr, stdout_lines=out_lines, - diff=diff) - else: - return module.exit_json(changed=changed, msg=out_clean, - rc=rc, cmd=cmdstr, stdout_lines=out_lines) + + changed = changed_marker in out + out_clean = out.replace(changed_marker, '') + out_lines = out_clean.split('\n') + while '' in out_lines: + out_lines.remove('') + if module._diff: + diff = {'prepared': out_clean} + return module.exit_json(changed=changed, msg=out_clean, + rc=rc, cmd=cmdstr, stdout_lines=out_lines, + diff=diff) + + return module.exit_json(changed=changed, msg=out_clean, + rc=rc, cmd=cmdstr, stdout_lines=out_lines) if __name__ == '__main__': diff --git a/test/sanity/pep8/legacy-files.txt b/test/sanity/pep8/legacy-files.txt index c31a63f4aeb..2f9c7edd33f 100644 --- a/test/sanity/pep8/legacy-files.txt +++ b/test/sanity/pep8/legacy-files.txt @@ -149,7 +149,6 @@ lib/ansible/modules/database/vertica/vertica_facts.py lib/ansible/modules/database/vertica/vertica_role.py lib/ansible/modules/database/vertica/vertica_schema.py lib/ansible/modules/database/vertica/vertica_user.py -lib/ansible/modules/files/synchronize.py lib/ansible/modules/files/tempfile.py lib/ansible/modules/monitoring/bigpanda.py lib/ansible/modules/monitoring/datadog_event.py