mirror of
https://github.com/ansible-collections/ansible.posix.git
synced 2026-05-08 22:33:49 +00:00
refactor to comply with current ansible-lint and sanity guidelines
Signed-off-by: Adam Miller <admiller@redhat.com>
This commit is contained in:
@@ -1,2 +1,3 @@
|
||||
---
|
||||
dependencies:
|
||||
- prepare_tests
|
||||
|
||||
@@ -1,310 +1,350 @@
|
||||
- name: install rsync
|
||||
package:
|
||||
---
|
||||
- name: Install rsync
|
||||
ansible.builtin.package:
|
||||
name: rsync
|
||||
when: ansible_distribution != "MacOSX"
|
||||
- name: Clean up the working directory and files
|
||||
file:
|
||||
path: '{{ output_dir }}'
|
||||
|
||||
- name: Clean up the working disrectory and files
|
||||
ansible.builtin.file:
|
||||
path: "{{ output_dir }}"
|
||||
state: absent
|
||||
|
||||
- name: Create the working directory
|
||||
file:
|
||||
path: '{{ output_dir }}'
|
||||
ansible.builtin.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
|
||||
mode: "0755"
|
||||
|
||||
- name: synchronize file to new filename
|
||||
synchronize:
|
||||
src: '{{output_dir}}/foo.txt'
|
||||
dest: '{{output_dir}}/foo.result'
|
||||
- name: Create test new files
|
||||
ansible.builtin.copy:
|
||||
dest: "{{ output_dir }}/{{ item }}"
|
||||
mode: "0644"
|
||||
content: hello world
|
||||
loop:
|
||||
- foo.txt
|
||||
- bar.txt
|
||||
|
||||
- name: Synchronize file to new filename
|
||||
ansible.posix.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
|
||||
delegate_to: "{{ inventory_hostname }}"
|
||||
|
||||
'')'
|
||||
- name: test that the file was really copied over
|
||||
stat:
|
||||
path: '{{ output_dir }}/foo.result'
|
||||
- name: Check that the file was copied over correctly
|
||||
ansible.builtin.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\n')"
|
||||
|
||||
- name: Test that the file was really copied over
|
||||
ansible.builtin.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:
|
||||
- name: Test that the file was really copied over
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- sync_result.changed == False
|
||||
- stat_result.stat.exists == True
|
||||
- stat_result.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
|
||||
|
||||
- name: Test that the file is not copied a second time
|
||||
ansible.posix.synchronize:
|
||||
src: "'{{ output_dir }}/foo.txt'"
|
||||
dest: "'{{ output_dir }}/foo.result'"
|
||||
register: sync_result
|
||||
delegate_to: "{{ inventory_hostname }}"
|
||||
|
||||
- name: Test that no change occurred
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- not sync_result.changed
|
||||
|
||||
- name: Cleanup
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
state: absent
|
||||
path: '{{output_dir}}/{{item}}'
|
||||
with_items:
|
||||
- foo.result
|
||||
- bar.result
|
||||
path: "{{ output_dir }}/{{ item }}"
|
||||
loop:
|
||||
- foo.result
|
||||
- bar.result
|
||||
|
||||
- name: Synchronize using the mode=push param
|
||||
synchronize:
|
||||
src: '{{output_dir}}/foo.txt'
|
||||
dest: '{{output_dir}}/foo.result'
|
||||
ansible.posix.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
|
||||
delegate_to: "{{ inventory_hostname }}"
|
||||
|
||||
'')'
|
||||
- name: test that the file was really copied over
|
||||
stat:
|
||||
path: '{{ output_dir }}/foo.result'
|
||||
- name: Check that the file was copied over correctly mode=push
|
||||
ansible.builtin.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\n')"
|
||||
|
||||
- name: Test that the file was really copied over
|
||||
ansible.builtin.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'
|
||||
- name: Ensure file exists and checksum matches
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- stat_result.stat.exists == True
|
||||
- stat_result.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
|
||||
|
||||
- name: Test that the file is not copied a second time
|
||||
ansible.posix.synchronize:
|
||||
src: "{{ output_dir }}/foo.txt"
|
||||
dest: "{{ output_dir }}/foo.result"
|
||||
mode: push
|
||||
register: sync_result
|
||||
delegate_to: '{{ inventory_hostname }}'
|
||||
- assert:
|
||||
delegate_to: "{{ inventory_hostname }}"
|
||||
|
||||
- name: Ensure no change occorred
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- sync_result.changed == False
|
||||
- sync_result.changed == False
|
||||
|
||||
- name: Cleanup
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
state: absent
|
||||
path: '{{output_dir}}/{{item}}'
|
||||
with_items:
|
||||
- foo.result
|
||||
- bar.result
|
||||
path: "{{ output_dir }}/{{ item }}"
|
||||
loop:
|
||||
- foo.result
|
||||
- bar.result
|
||||
|
||||
- name: Synchronize using the mode=pull param
|
||||
synchronize:
|
||||
src: '{{output_dir}}/foo.txt'
|
||||
dest: '{{output_dir}}/foo.result'
|
||||
ansible.posix.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
|
||||
delegate_to: "{{ inventory_hostname }}"
|
||||
|
||||
'')'
|
||||
- name: test that the file was really copied over
|
||||
stat:
|
||||
path: '{{ output_dir }}/foo.result'
|
||||
- name: Check that the file was copied over correctly mode=pull
|
||||
ansible.builtin.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\n')"
|
||||
|
||||
- name: Test that the file was really copied over
|
||||
ansible.builtin.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'
|
||||
- name: Ensure file exists and checksum matches
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- stat_result.stat.exists == True
|
||||
- stat_result.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
|
||||
|
||||
- name: Test that the file is not copied a second time
|
||||
ansible.posix.synchronize:
|
||||
src: "{{ output_dir }}/foo.txt"
|
||||
dest: "{{ output_dir }}/foo.result"
|
||||
mode: pull
|
||||
register: sync_result
|
||||
delegate_to: '{{ inventory_hostname }}'
|
||||
- assert:
|
||||
delegate_to: "{{ inventory_hostname }}"
|
||||
|
||||
- name: Ensure no change occorred
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- sync_result.changed == False
|
||||
- sync_result.changed == False
|
||||
|
||||
- name: Cleanup
|
||||
file:
|
||||
ansible.builtin.file:
|
||||
state: absent
|
||||
path: '{{output_dir}}/{{item}}'
|
||||
with_items:
|
||||
- foo.result
|
||||
- bar.result
|
||||
path: "{{ output_dir }}/{{ item }}"
|
||||
loop:
|
||||
- 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'
|
||||
- name: Synchronize files using with_items (issue#5965)
|
||||
ansible.posix.synchronize:
|
||||
src: "{{ output_dir }}/{{ item }}"
|
||||
dest: "{{ output_dir }}/{{ item }}.result"
|
||||
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 }}'
|
||||
- bar.txt
|
||||
register: sync_result
|
||||
delegate_to: "{{ inventory_hostname }}"
|
||||
|
||||
- name: Validate syncrhonize with_items
|
||||
ansible.builtin.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\n')"
|
||||
- "sync_result.results[1].msg.endswith('+ bar.txt\n')"
|
||||
|
||||
- name: Cleanup
|
||||
ansible.builtin.file:
|
||||
state: absent
|
||||
path: "{{ output_dir }}/{{ item }}.result"
|
||||
loop:
|
||||
- foo.txt
|
||||
- bar.txt
|
||||
|
||||
- name: Synchronize files using rsync_path (issue#7182)
|
||||
ansible.posix.synchronize:
|
||||
src: "{{ output_dir }}/foo.txt"
|
||||
dest: "{{ output_dir }}/foo.rsync_path"
|
||||
rsync_path: sudo rsync
|
||||
register: sync_result
|
||||
delegate_to: "{{ inventory_hostname }}"
|
||||
|
||||
- name: Validate syncrhonize using rsync_path (issue#7182)
|
||||
ansible.builtin.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\n')"
|
||||
|
||||
- name: Cleanup
|
||||
ansible.builtin.file:
|
||||
state: absent
|
||||
path: "{{ output_dir }}/{{ item }}"
|
||||
loop:
|
||||
- foo.rsync_path
|
||||
|
||||
- name: Add subdirectories for link-dest test
|
||||
ansible.builtin.file:
|
||||
path: "{{ output_dir }}/{{ item }}/"
|
||||
state: directory
|
||||
mode: "0755"
|
||||
loop:
|
||||
- directory_a
|
||||
- directory_b
|
||||
|
||||
- name: Copy foo.txt into the first directory
|
||||
ansible.posix.synchronize:
|
||||
src: "{{ output_dir }}/foo.txt"
|
||||
dest: "{{ output_dir }}/{{ item }}/foo.txt"
|
||||
loop:
|
||||
- directory_a
|
||||
delegate_to: "{{ inventory_hostname }}"
|
||||
|
||||
- name: Synchronize files using link_dest
|
||||
ansible.posix.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
|
||||
ansible.builtin.stat:
|
||||
path: "{{ output_dir }}/directory_a/foo.txt"
|
||||
register: stat_result_a
|
||||
|
||||
- name: Get stat information for directory_b
|
||||
ansible.builtin.stat:
|
||||
path: "{{ output_dir }}/directory_b/foo.txt"
|
||||
register: stat_result_b
|
||||
|
||||
- name: Ensure file exists and inode matches
|
||||
ansible.builtin.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
|
||||
ansible.posix.synchronize:
|
||||
src: "{{ output_dir }}/foo.txt"
|
||||
dest: "{{ output_dir }}/foo.result"
|
||||
link_dest:
|
||||
- "{{ output_dir }}"
|
||||
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:
|
||||
delegate_to: "{{ inventory_hostname }}"
|
||||
|
||||
- name: Ensure no change occorred and failed
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- '''changed'' in sync_result'
|
||||
- sync_result is not changed
|
||||
- sync_result is failed
|
||||
|
||||
- name: Cleanup
|
||||
ansible.builtin.file:
|
||||
state: absent
|
||||
path: "{{ output_dir }}/{{ item }}"
|
||||
loop:
|
||||
- directory_b/foo.txt
|
||||
- directory_a/foo.txt
|
||||
- directory_a
|
||||
- directory_b
|
||||
|
||||
- name: Setup - test for source with working dir with spaces in path
|
||||
ansible.builtin.file:
|
||||
state: directory
|
||||
path: "{{ output_dir }}/{{ item }}"
|
||||
mode: "0755"
|
||||
delegate_to: "{{ inventory_hostname }}"
|
||||
loop:
|
||||
- directory a
|
||||
- directory b
|
||||
|
||||
- name: Setup - create test new files
|
||||
ansible.builtin.copy:
|
||||
dest: "{{ output_dir }}/directory a/{{ item }}"
|
||||
mode: "0644"
|
||||
content: hello world
|
||||
loop:
|
||||
- foo.txt
|
||||
delegate_to: "{{ inventory_hostname }}"
|
||||
|
||||
- name: Copy source with spaces in dir path
|
||||
ansible.posix.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
|
||||
ansible.builtin.stat:
|
||||
path: "{{ output_dir }}/directory b/foo.txt"
|
||||
register: stat_result_b
|
||||
|
||||
- name: Ensure file exists and checksum matches
|
||||
ansible.builtin.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:
|
||||
ansible.builtin.file:
|
||||
state: absent
|
||||
path: '{{output_dir}}/{{item}}'
|
||||
with_items:
|
||||
- 'directory b/foo.txt'
|
||||
- 'directory a/foo.txt'
|
||||
- 'directory a'
|
||||
- 'directory b'
|
||||
path: "{{ output_dir }}/{{ item }}"
|
||||
loop:
|
||||
- directory b/foo.txt
|
||||
- directory a/foo.txt
|
||||
- directory a
|
||||
- directory b
|
||||
|
||||
Reference in New Issue
Block a user