| --- |
| # |
| # Wrapper to pass through following variables |
| # resources_source_host |
| # resources_dir |
| # resource_source_filename |
| # resource_destination_directory |
| # And handling target directory creation and possible removal on failure. |
| # Idempotence is also handled here as nothing is done if resource_destination_directory |
| # was already created. |
| # |
| # Logically also tranport method selection belongs to here but left it to caller |
| # as this is called in a loop causing "package_facts" called many times |
| # (not sure if it would matter). |
| # |
| - name: "Create {{ resource_destination_directory }} directory" |
| file: |
| path: "{{ resource_destination_directory }}" |
| state: directory |
| |
| - name: Check if resources are uploaded |
| stat: |
| path: "{{ resource_destination_directory }}/{{ resource_source_filename }}-uploaded" |
| register: uploaded |
| |
| - name: "Handle transport of one archive file" |
| when: not uploaded.stat.exists |
| block: |
| - name: "Get list of destination directory files" |
| find: |
| path: "{{ resource_destination_directory }}" |
| file_type: any |
| register: original_files |
| |
| - name: "Unarchive resource {{ resource_source_filename }} from host {{ resources_source_host }}, transport is {{ transport }}" |
| include_tasks: "unarchive-{{ transport }}-resource.yml" |
| - file: |
| path: "{{ resource_destination_directory }}/{{ resource_source_filename }}-uploaded" |
| state: touch |
| rescue: |
| - name: "Get list of destination directory files" |
| find: |
| path: "{{ resource_destination_directory }}" |
| file_type: any |
| register: files_after_fail |
| |
| - name: "Cleanup the destination directory {{ resource_destination_directory }} on error" |
| file: |
| path: "{{ item.path }}" |
| state: absent |
| with_items: "{{ files_after_fail.files | difference(original_files.files) }}" |
| when: files_after_fail is defined |
| |
| - fail: |
| msg: "Upload of {{ resource_source_filename }} failed" |