blob: 879a9dfe4f6b3ccece1506b79045e9e7d4782140 [file] [log] [blame]
---
#
# Wrapper to pass through following variables:
# resources_source_host
# resources_dir
# resource_source_filename
# resource_destination_directory
# and handle target directory creation and eventual 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"
- name: "Generate flag file after resources are deployed on infra"
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: "{{ files_item.path }}"
state: absent
loop: "{{ files_after_fail.files | difference(original_files.files) }}"
loop_control:
label: "{{ files_item.path }}"
loop_var: files_item
when: files_after_fail is defined
- name: "Report failure of upload operation"
fail:
msg: "Upload of {{ resource_source_filename }} failed"