mirror of
https://github.com/ansible-collections/ansible.posix.git
synced 2026-01-11 15:15:26 +01:00
Example :
cd "/home/a/ansible plays"
task:
- synchronize:
src: a
dest: b
Results in the following error being thrown
fatal: [remote-host]: FAILED! => {"changed": false, "cmd": "/usr/bin/rsync --delay-updates -F --compress --archive --rsh='/usr/bin/ssh -S none -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' --rsync-path='sudo -u root rsync' --out-format='<<CHANGED>>%i %n%L' /home/a/ansible plays/deployments// remote-user@remote-host:/data/", "msg": "rsync: [sender] link_stat \"/home/a/ansible\" failed: No such file or directory (2)\nrsync: [sender] change_dir \"/home/a/ansible plays/plays/a/\" failed: No such file or directory (2)\nrsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1330) [sender=3.2.3]\n", "rc": 23}
310 lines
7.8 KiB
YAML
310 lines
7.8 KiB
YAML
- name: install rsync
|
|
package:
|
|
name: rsync
|
|
when: ansible_distribution != "MacOSX"
|
|
- name: Clean up the working directory and files
|
|
file:
|
|
path: '{{ output_dir }}'
|
|
state: absent
|
|
- name: Create the working directory
|
|
file:
|
|
path: '{{ output_dir }}'
|
|
state: directory
|
|
- name: create test new files
|
|
copy:
|
|
dest: '{{output_dir}}/{{item}}'
|
|
mode: '0644'
|
|
content: 'hello world'
|
|
with_items:
|
|
- foo.txt
|
|
- bar.txt
|
|
|
|
- name: synchronize file to new filename
|
|
synchronize:
|
|
src: '{{output_dir}}/foo.txt'
|
|
dest: '{{output_dir}}/foo.result'
|
|
register: sync_result
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
- assert:
|
|
that:
|
|
- '''changed'' in sync_result'
|
|
- sync_result.changed == true
|
|
- '''cmd'' in sync_result'
|
|
- '''rsync'' in sync_result.cmd'
|
|
- '''msg'' in sync_result'
|
|
- sync_result.msg.startswith('>f+')
|
|
- 'sync_result.msg.endswith(''+ foo.txt
|
|
|
|
'')'
|
|
- name: test that the file was really copied over
|
|
stat:
|
|
path: '{{ output_dir }}/foo.result'
|
|
register: stat_result
|
|
- assert:
|
|
that:
|
|
- stat_result.stat.exists == True
|
|
- stat_result.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
|
|
|
|
- name: test that the file is not copied a second time
|
|
synchronize:
|
|
src='{{output_dir}}/foo.txt'
|
|
dest='{{output_dir}}/foo.result'
|
|
register: sync_result
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
- assert:
|
|
that:
|
|
- sync_result.changed == False
|
|
- name: Cleanup
|
|
file:
|
|
state: absent
|
|
path: '{{output_dir}}/{{item}}'
|
|
with_items:
|
|
- foo.result
|
|
- bar.result
|
|
|
|
- name: Synchronize using the mode=push param
|
|
synchronize:
|
|
src: '{{output_dir}}/foo.txt'
|
|
dest: '{{output_dir}}/foo.result'
|
|
mode: push
|
|
register: sync_result
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
- assert:
|
|
that:
|
|
- '''changed'' in sync_result'
|
|
- sync_result.changed == true
|
|
- '''cmd'' in sync_result'
|
|
- '''rsync'' in sync_result.cmd'
|
|
- '''msg'' in sync_result'
|
|
- sync_result.msg.startswith('>f+')
|
|
- 'sync_result.msg.endswith(''+ foo.txt
|
|
|
|
'')'
|
|
- name: test that the file was really copied over
|
|
stat:
|
|
path: '{{ output_dir }}/foo.result'
|
|
register: stat_result
|
|
- assert:
|
|
that:
|
|
- stat_result.stat.exists == True
|
|
- stat_result.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
|
|
|
|
- name: test that the file is not copied a second time
|
|
synchronize:
|
|
src: '{{output_dir}}/foo.txt'
|
|
dest: '{{output_dir}}/foo.result'
|
|
mode: push
|
|
register: sync_result
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
- assert:
|
|
that:
|
|
- sync_result.changed == False
|
|
- name: Cleanup
|
|
file:
|
|
state: absent
|
|
path: '{{output_dir}}/{{item}}'
|
|
with_items:
|
|
- foo.result
|
|
- bar.result
|
|
|
|
- name: Synchronize using the mode=pull param
|
|
synchronize:
|
|
src: '{{output_dir}}/foo.txt'
|
|
dest: '{{output_dir}}/foo.result'
|
|
mode: pull
|
|
register: sync_result
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
- assert:
|
|
that:
|
|
- '''changed'' in sync_result'
|
|
- sync_result.changed == true
|
|
- '''cmd'' in sync_result'
|
|
- '''rsync'' in sync_result.cmd'
|
|
- '''msg'' in sync_result'
|
|
- sync_result.msg.startswith('>f+')
|
|
- 'sync_result.msg.endswith(''+ foo.txt
|
|
|
|
'')'
|
|
- name: test that the file was really copied over
|
|
stat:
|
|
path: '{{ output_dir }}/foo.result'
|
|
register: stat_result
|
|
- assert:
|
|
that:
|
|
- stat_result.stat.exists == True
|
|
- stat_result.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
|
|
|
|
- name: test that the file is not copied a second time
|
|
synchronize:
|
|
src: '{{output_dir}}/foo.txt'
|
|
dest: '{{output_dir}}/foo.result'
|
|
mode: pull
|
|
register: sync_result
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
- assert:
|
|
that:
|
|
- sync_result.changed == False
|
|
- name: Cleanup
|
|
file:
|
|
state: absent
|
|
path: '{{output_dir}}/{{item}}'
|
|
with_items:
|
|
- foo.result
|
|
- bar.result
|
|
|
|
- name: synchronize files using with_items (issue#5965)
|
|
synchronize:
|
|
src: '{{output_dir}}/{{item}}'
|
|
dest: '{{output_dir}}/{{item}}.result'
|
|
with_items:
|
|
- foo.txt
|
|
- bar.txt
|
|
register: sync_result
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
- assert:
|
|
that:
|
|
- sync_result.changed
|
|
- sync_result.msg == 'All items completed'
|
|
- '''results'' in sync_result'
|
|
- sync_result.results|length == 2
|
|
- 'sync_result.results[0].msg.endswith(''+ foo.txt
|
|
|
|
'')'
|
|
- 'sync_result.results[1].msg.endswith(''+ bar.txt
|
|
|
|
'')'
|
|
- name: Cleanup
|
|
file:
|
|
state: absent
|
|
path: '{{output_dir}}/{{item}}.result'
|
|
with_items:
|
|
- foo.txt
|
|
- bar.txt
|
|
|
|
- name: synchronize files using rsync_path (issue#7182)
|
|
synchronize:
|
|
src: '{{output_dir}}/foo.txt'
|
|
dest: '{{output_dir}}/foo.rsync_path'
|
|
rsync_path: 'sudo rsync'
|
|
register: sync_result
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
- assert:
|
|
that:
|
|
- '''changed'' in sync_result'
|
|
- sync_result.changed == true
|
|
- '''cmd'' in sync_result'
|
|
- '''rsync'' in sync_result.cmd'
|
|
- '''rsync_path'' in sync_result.cmd'
|
|
- '''msg'' in sync_result'
|
|
- sync_result.msg.startswith('>f+')
|
|
- 'sync_result.msg.endswith(''+ foo.txt
|
|
|
|
'')'
|
|
- name: Cleanup
|
|
file:
|
|
state: absent
|
|
path: '{{output_dir}}/{{item}}'
|
|
with_items:
|
|
- foo.rsync_path
|
|
- name: add subdirectories for link-dest test
|
|
file:
|
|
path: '{{output_dir}}/{{item}}/'
|
|
state: directory
|
|
mode: '0755'
|
|
with_items:
|
|
- directory_a
|
|
- directory_b
|
|
- name: copy foo.txt into the first directory
|
|
synchronize:
|
|
src: '{{output_dir}}/foo.txt'
|
|
dest: '{{output_dir}}/{{item}}/foo.txt'
|
|
with_items:
|
|
- directory_a
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
- name: synchronize files using link_dest
|
|
synchronize:
|
|
src: '{{output_dir}}/directory_a/foo.txt'
|
|
dest: '{{output_dir}}/directory_b/foo.txt'
|
|
link_dest:
|
|
- '{{output_dir}}/directory_a'
|
|
register: sync_result
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
- name: get stat information for directory_a
|
|
stat:
|
|
path: '{{ output_dir }}/directory_a/foo.txt'
|
|
register: stat_result_a
|
|
- name: get stat information for directory_b
|
|
stat:
|
|
path: '{{ output_dir }}/directory_b/foo.txt'
|
|
register: stat_result_b
|
|
- assert:
|
|
that:
|
|
- '''changed'' in sync_result'
|
|
- sync_result.changed == true
|
|
- stat_result_a.stat.inode == stat_result_b.stat.inode
|
|
- name: synchronize files using link_dest that would be recursive
|
|
synchronize:
|
|
src: '{{output_dir}}/foo.txt'
|
|
dest: '{{output_dir}}/foo.result'
|
|
link_dest:
|
|
- '{{output_dir}}'
|
|
register: sync_result
|
|
ignore_errors: true
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
|
|
- assert:
|
|
that:
|
|
- sync_result is not changed
|
|
- sync_result is failed
|
|
- name: Cleanup
|
|
file:
|
|
state: absent
|
|
path: '{{output_dir}}/{{item}}'
|
|
with_items:
|
|
- directory_b/foo.txt
|
|
- directory_a/foo.txt
|
|
- directory_a
|
|
- directory_b
|
|
|
|
- name: setup - test for source with working dir with spaces in path
|
|
file:
|
|
state: directory
|
|
path: '{{output_dir}}/{{item}}'
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
with_items:
|
|
- 'directory a'
|
|
- 'directory b'
|
|
- name: setup - create test new files
|
|
copy:
|
|
dest: '{{output_dir}}/directory a/{{item}}'
|
|
mode: '0644'
|
|
content: 'hello world'
|
|
with_items:
|
|
- foo.txt
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
- name: copy source with spaces in dir path
|
|
synchronize:
|
|
src: '{{output_dir}}/directory a/foo.txt'
|
|
dest: '{{output_dir}}/directory b/'
|
|
delegate_to: '{{ inventory_hostname }}'
|
|
register: sync_result
|
|
ignore_errors: true
|
|
- name: get stat information for directory_b
|
|
stat:
|
|
path: '{{ output_dir }}/directory b/foo.txt'
|
|
register: stat_result_b
|
|
- assert:
|
|
that:
|
|
- '''changed'' in sync_result'
|
|
- sync_result.changed == true
|
|
- stat_result_b.stat.exists == True
|
|
- stat_result_b.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
|
|
- name: Cleanup
|
|
file:
|
|
state: absent
|
|
path: '{{output_dir}}/{{item}}'
|
|
with_items:
|
|
- 'directory b/foo.txt'
|
|
- 'directory a/foo.txt'
|
|
- 'directory a'
|
|
- 'directory b'
|