|
|
@ -47,11 +47,40 @@ |
|
|
|
- download_force_cache |
|
|
|
- not download_localhost |
|
|
|
|
|
|
|
# We check a number of mirrors that may hold the file and pick a working one at random |
|
|
|
# This task will avoid logging it's parameters to not leak environment passwords in the log |
|
|
|
- name: download_file | Validate mirrors |
|
|
|
uri: |
|
|
|
url: "{{ mirror }}" |
|
|
|
method: HEAD |
|
|
|
validate_certs: "{{ download_validate_certs }}" |
|
|
|
url_username: "{{ download.username | default(omit) }}" |
|
|
|
url_password: "{{ download.password | default(omit) }}" |
|
|
|
force_basic_auth: "{{ download.force_basic_auth | default(omit) }}" |
|
|
|
delegate_to: "{{ download_delegate if download_force_cache else inventory_hostname }}" |
|
|
|
run_once: "{{ download_force_cache }}" |
|
|
|
register: uri_result |
|
|
|
until: uri_result is success |
|
|
|
retries: 4 |
|
|
|
delay: "{{ retry_stagger | default(5) }}" |
|
|
|
environment: "{{ proxy_env }}" |
|
|
|
no_log: true |
|
|
|
loop: "{{ download.mirrors | default([download.url]) }}" |
|
|
|
loop_control: |
|
|
|
loop_var: mirror |
|
|
|
ignore_errors: true |
|
|
|
|
|
|
|
# Ansible 2.9 requires we convert a generator to a list |
|
|
|
- name: download_file | Get the list of working mirrors |
|
|
|
set_fact: |
|
|
|
valid_mirror_urls: "{{ uri_result.results | selectattr('failed', 'eq', False) | map(attribute='mirror') | list }}" |
|
|
|
delegate_to: "{{ download_delegate if download_force_cache else inventory_hostname }}" |
|
|
|
|
|
|
|
# This must always be called, to check if the checksum matches. On no-match the file is re-downloaded. |
|
|
|
# This task will avoid logging it's parameters to not leak environment passwords in the log |
|
|
|
- name: download_file | Download item |
|
|
|
get_url: |
|
|
|
url: "{{ download.url }}" |
|
|
|
url: "{{ valid_mirror_urls | random }}" |
|
|
|
dest: "{{ file_path_cached if download_force_cache else download.dest }}" |
|
|
|
owner: "{{ omit if download_localhost else (download.owner | default(omit)) }}" |
|
|
|
mode: "{{ omit if download_localhost else (download.mode | default(omit)) }}" |
|
|
|