diff --git a/tripleo_ansible/roles/tripleo_transfer/defaults/main.yml b/tripleo_ansible/roles/tripleo_transfer/defaults/main.yml index 04ee047d9..5b659782d 100644 --- a/tripleo_ansible/roles/tripleo_transfer/defaults/main.yml +++ b/tripleo_ansible/roles/tripleo_transfer/defaults/main.yml @@ -33,3 +33,18 @@ tripleo_transfer_key_location: "~/transfer_key" # tripleo_transfer_cleanup_keys: clean up the keypair from the source host # and remove public key from destination host when true. tripleo_transfer_cleanup_keys: true +# tripleo_transfer_exclude: a list of patterns to selectively exclude +# some files from the transfer to the destination host. +tripleo_transfer_exclude: [] +# tripleo_transfer_include: a list of patterns to selectively include +# some files from the transfer to the destination host. Files in this list +# are not filtered out with tripleo_transfer_exclude. +tripleo_transfer_include: [] +# tripleo_transfer_sync_options: override default transfer options +tripleo_transfer_sync_options: + --delay-updates + -F + --ignore-times + --compress + --archive + --delete diff --git a/tripleo_ansible/roles/tripleo_transfer/molecule/default/cleanup.yml b/tripleo_ansible/roles/tripleo_transfer/molecule/default/cleanup.yml index 5242a1059..f499fd53f 100644 --- a/tripleo_ansible/roles/tripleo_transfer/molecule/default/cleanup.yml +++ b/tripleo_ansible/roles/tripleo_transfer/molecule/default/cleanup.yml @@ -27,3 +27,5 @@ loop: - "{{ test_src_dir }}" - "{{ test_dst_dir }}" + - "{{ test2_src_dir }}" + - "{{ test2_dst_dir }}" diff --git a/tripleo_ansible/roles/tripleo_transfer/molecule/default/converge.yml b/tripleo_ansible/roles/tripleo_transfer/molecule/default/converge.yml index fd6047e5a..795bca55c 100644 --- a/tripleo_ansible/roles/tripleo_transfer/molecule/default/converge.yml +++ b/tripleo_ansible/roles/tripleo_transfer/molecule/default/converge.yml @@ -41,6 +41,8 @@ loop: - "{{ test_src_dir }}" - "{{ test_dst_dir }}" + - "{{ test2_src_dir }}" + - "{{ test2_dst_dir }}" - name: Create 1GB src test files with random content shell: >- @@ -63,3 +65,19 @@ tripleo_transfer_src_dir: "{{ test_src_dir }}" tripleo_transfer_dest_host: controller1 tripleo_transfer_dest_dir: "{{ test_dst_dir }}" + + - name: Create empty src test files + file: + state: touch + path: "{{ test2_src_dir }}/{{ item }}" + loop: "{{ test2_src_files + test2_exclude_src_files }}" + + - include_role: + name: "tripleo_transfer" + vars: + tripleo_transfer_src_host: controller2 + tripleo_transfer_src_dir: "{{ test2_src_dir }}" + tripleo_transfer_dest_host: controller1 + tripleo_transfer_dest_dir: "{{ test2_dst_dir }}" + tripleo_transfer_exclude: "{{ test2_exclude_pattern }}" + tripleo_transfer_include: "{{ test2_include_pattern }}" diff --git a/tripleo_ansible/roles/tripleo_transfer/molecule/default/molecule.yml b/tripleo_ansible/roles/tripleo_transfer/molecule/default/molecule.yml index 6c9fb2df7..adb6de1a3 100644 --- a/tripleo_ansible/roles/tripleo_transfer/molecule/default/molecule.yml +++ b/tripleo_ansible/roles/tripleo_transfer/molecule/default/molecule.yml @@ -47,6 +47,20 @@ provisioner: - testfile4 - testfile5 - testfile6 + test2_src_dir: "/tmp/src_files_2" + test2_dst_dir: "/tmp/dst_files_2" + test2_src_files: + - transferred + test2_exclude_src_files: + - skip1 + - skip2 + - donotcopy + test2_include_pattern: + - transferred + test2_exclude_pattern: + - 'skip*' + - donotcopy + log: true env: ANSIBLE_STDOUT_CALLBACK: yaml diff --git a/tripleo_ansible/roles/tripleo_transfer/molecule/default/verify.yml b/tripleo_ansible/roles/tripleo_transfer/molecule/default/verify.yml index ee50f57e9..e4fe0c006 100644 --- a/tripleo_ansible/roles/tripleo_transfer/molecule/default/verify.yml +++ b/tripleo_ansible/roles/tripleo_transfer/molecule/default/verify.yml @@ -24,6 +24,8 @@ paths: - "{{ test_src_dir }}" - "{{ test_dst_dir }}" + - "{{ test2_src_dir }}" + - "{{ test2_dst_dir }}" get_checksum: true recurse: true register: _fs_data @@ -40,8 +42,23 @@ - set_fact: result_file_list: "{{ _fs_data | json_query('files[*].path') }}" test_dst_files: "{{ test_dst_files | map('regex_replace', '(.*)', test_dst_dir ~ '/\\1') }}" + test2_excluded_files: "{{ test2_excluded_files | map('regex_replace', '(.*)', test2_dst_dir ~ '/\\1') }}" - name: Verify that the dst file are not there any more assert: that: - test_dst_files is not subset(result_file_list) + + - name: Verify that files excluded from a transfer are not copied + assert: + that: + - test2_excluded_files is not subset(result_file_list) + + - name: Verify that the transfer with exclude patterns did work + assert: + that: + - _fs_data | json_query(srcfilequery) == _fs_data | json_query(dstfilequery) + vars: + srcfilequery: files[?path =='{{ test2_src_dir }}/{{ item }}'].checksum + dstfilequery: files[?path =='{{ test2_dst_dir }}/{{ item }}'].checksum + loop: "{{ test2_src_files }}" diff --git a/tripleo_ansible/roles/tripleo_transfer/tasks/main.yml b/tripleo_ansible/roles/tripleo_transfer/tasks/main.yml index 6684c67a8..ae8d826c6 100644 --- a/tripleo_ansible/roles/tripleo_transfer/tasks/main.yml +++ b/tripleo_ansible/roles/tripleo_transfer/tasks/main.yml @@ -67,15 +67,20 @@ {{ hostvars[tripleo_transfer_dest_host].ansible_user | default(hostvars[tripleo_transfer_dest_host].ansible_ssh_user | default(hostvars[tripleo_transfer_dest_host].ansible_user_id)) }} + tripleo_transfer_include_parameters: >- + {{ tripleo_transfer_include is string | + ternary([tripleo_transfer_include], tripleo_transfer_include) | + map('regex_replace', '^(.*)$', "--include='\1'") | join(' ') }} + tripleo_transfer_exclude_parameters: >- + {{ tripleo_transfer_exclude is string | + ternary([tripleo_transfer_exclude], tripleo_transfer_exclude) | + map('regex_replace', '^(.*)$', "--exclude='\1'") | join(' ') }} shell: >- /usr/bin/rsync -v - --delay-updates - -F - --ignore-times - --compress - --archive - --delete + {{ tripleo_transfer_sync_options }} + {{ tripleo_transfer_include_parameters }} + {{ tripleo_transfer_exclude_parameters }} --rsync-path='sudo rsync' --rsh='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i {{ tripleo_transfer_key_location }}' {{ tripleo_transfer_src_dir_safe }}