Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Synchronize: suppress synchronize verbose output #220

Open
wants to merge 14 commits into
base: main
Choose a base branch
from
2 changes: 2 additions & 0 deletions changelogs/fragments/220_synchronize_add_quiet_option.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
minor_changes:
- synchronize - add the ``quiet`` option to suppress non-error messages (https://github.com/ansible-collections/ansible.posix/issues/171).
33 changes: 26 additions & 7 deletions plugins/modules/synchronize.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
from __future__ import absolute_import, division, print_function
__metaclass__ = type


DOCUMENTATION = r'''
---
module: synchronize
Expand Down Expand Up @@ -203,6 +202,12 @@
description: Internal use only. See C(use_ssh_args) for ssh arg settings.
type: str
required: false
quiet:
description:
- This option specifies quiet option which on true suppresses the output.
type: bool
default: false
version_added: 1.6.0

notes:
- rsync must be installed on both the local and remote host.
Expand Down Expand Up @@ -360,6 +365,12 @@
src: /tmp/localpath/
dest: /tmp/remotepath
rsync_path: /usr/gnu/bin/rsync

- name: Synchronization with quiet option enabled
ansible.posix.synchronize:
src: some/relative/path
dest: /some/absolute/path
quiet: true
'''


Expand Down Expand Up @@ -437,6 +448,7 @@ def main():
delay_updates=dict(type='bool', default=True),
mode=dict(type='str', default='push', choices=['pull', 'push']),
link_dest=dict(type='list', elements='path'),
quiet=dict(type='bool', default=False)
),
supports_check_mode=True,
)
Expand Down Expand Up @@ -477,6 +489,7 @@ def main():
verify_host = module.params['verify_host']
link_dest = module.params['link_dest']
delay_updates = module.params['delay_updates']
quiet = module.params['quiet']

if '/' not in rsync:
rsync = module.get_bin_path(rsync, required=True)
Expand Down Expand Up @@ -601,6 +614,9 @@ def main():

cmd.append(shlex_quote(source))
cmd.append(shlex_quote(dest))
if quiet:
cmd.append('--quiet')

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This break the change detection as @felixfontein was mentioning here

Plus we probably want to keep the changes in stdout_lines. It's only msg that we want to suppress them from.

cmdstr = ' '.join(cmd)

# If we are using password authentication, write the password into the pipe
Expand Down Expand Up @@ -633,14 +649,17 @@ def _write_password_to_pipe(proc):
out_lines = out_clean.split('\n')
while '' in out_lines:
out_lines.remove('')

result = dict(changed=changed, rc=rc, cmd=cmdstr, stdout_lines=out_lines, msg=out_clean)

if quiet:
changes = out.count(changed_marker) if changed else 0
result['msg'] = "%s files/directories have been synchronized" % changes

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)
result['diff'] = {'prepared': out_clean}

return module.exit_json(changed=changed, msg=out_clean,
rc=rc, cmd=cmdstr, stdout_lines=out_lines)
return module.exit_json(**result)


if __name__ == '__main__':
Expand Down
2 changes: 2 additions & 0 deletions tests/integration/inventory
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[testgroup]
testhost ansible_connection="local" ansible_pipelining="yes" ansible_python_interpreter="/Users/mandkulk/venv3.9/bin/python"
31 changes: 31 additions & 0 deletions tests/integration/targets/synchronize/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,37 @@
- stat_result_b.stat.exists == True
- stat_result_b.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'

- name: Synchronize files with quiet option
ansible.posix.synchronize:
src: '{{ output_dir }}/foo.txt'
dest: '{{ output_dir }}/foo.result'
quiet: true
register: sync_result

- name: Assertion for synchronize with quiet option
ansible.builtin.assert:
that:
- '''files/directories have been synchronized'' in sync_result.msg'

- name: Cleanup
ansible.builtin.file:
state: absent
path: '{{ output_dir }}/{{ item }}'
loop:
- foo.result
- bar.result

- name: Synchronize files without quiet option
ansible.posix.synchronize:
src: '{{ output_dir }}/foo.txt'
dest: '{{ output_dir }}/foo.result'
register: sync_result

- name: Assertion for synchronize without quiet option
ansible.builtin.assert:
that:
- '''files/directories have been synchronized'' not in sync_result.msg'

- name: Cleanup
ansible.builtin.file:
state: absent
Expand Down
Loading