--- - name: container_download | Make download decision if pull is required by tag or sha256 include: set_docker_image_facts.yml when: - download.enabled - download.container tags: - facts - name: container_download | Set file name of container tarballs set_fact: fname: "{{ local_release_dir }}/containers/{{ download.repo|regex_replace('/|\0|:', '_') }}:{{ download.tag|default(download.sha256)|regex_replace('/|\0|:', '_') }}.tar" run_once: true when: - download.enabled - download.container - download_run_once tags: - facts - name: "container_download | Set default value for 'container_changed' to false" set_fact: container_changed: "{{ pull_required|default(false) }}" when: - download.enabled - download.container - download_run_once - name: "container_download | Update the 'container_changed' fact" set_fact: container_changed: "{{ pull_required|default(false) or not 'up to date' in pull_task_result.stdout }}" when: - download.enabled - download.container - download_run_once - pull_required|default(download_always_pull) run_once: "{{ download_run_once }}" tags: - facts - name: container_download | Stat saved container image stat: path: "{{ fname }}" register: img changed_when: false delegate_to: "{{ download_delegate }}" delegate_facts: no become: false run_once: true when: - download.enabled - download.container - download_run_once - any_pull_required | default(download_always_pull) tags: - facts - name: container_download | save container images shell: "{{ docker_bin_dir }}/docker save {{ pull_args }} | gzip -{{ download_compress }} > {{ fname }}" delegate_to: "{{ download_delegate }}" delegate_facts: no register: saved failed_when: saved.stderr when: - download.enabled - download.container - download_run_once - any_pull_required | default(download_always_pull) - (ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] or download_delegate == "localhost") - (container_changed or not img.stat.exists) - name: container_download | create container images directory on ansible host file: state: directory path: "{{ fname | dirname }}" delegate_to: localhost delegate_facts: no run_once: true become: false when: - download.enabled - download.container - download_run_once - any_pull_required | default(download_always_pull) - ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] - inventory_hostname == download_delegate - download_delegate != "localhost" - saved.changed - name: container_download | copy container images to ansible host synchronize: src: "{{ fname }}" dest: "{{ fname }}" use_ssh_args: "{{ has_bastion | default(false) }}" mode: pull private_key: "{{ ansible_ssh_private_key_file }}" become: false when: - download.enabled - download.container - download_run_once - ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] - inventory_hostname == download_delegate - download_delegate != "localhost" - saved.changed - name: container_download | upload container images to nodes synchronize: src: "{{ fname }}" dest: "{{ fname }}" use_ssh_args: "{{ has_bastion | default(false) }}" mode: push become: true register: get_task until: get_task is succeeded retries: 4 delay: "{{ retry_stagger | random + 3 }}" when: - download.enabled - download.container - download_run_once - pull_required|default(download_always_pull) - (ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] and inventory_hostname != download_delegate or download_delegate == "localhost") tags: - upload - upgrade - name: container_download | load container images shell: "{{ docker_bin_dir }}/docker load < {{ fname }}" when: - download.enabled - download.container - download_run_once - pull_required|default(download_always_pull) - (ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] and inventory_hostname != download_delegate or download_delegate == "localhost") tags: - upload - upgrade