--- - name: downloading... debug: msg: "{{ download.url }}" when: "{{ download.enabled|bool and not download.container|bool }}" - name: Create dest directories file: path={{local_release_dir}}/{{download.dest|dirname}} state=directory recurse=yes when: "{{ download.enabled|bool and not download.container|bool }}" - name: Download items get_url: url: "{{download.url}}" dest: "{{local_release_dir}}/{{download.dest}}" sha256sum: "{{download.sha256 | default(omit)}}" owner: "{{ download.owner|default(omit) }}" mode: "{{ download.mode|default(omit) }}" register: get_url_result until: "'OK' in get_url_result.msg or 'file already exists' in get_url_result.msg" retries: 4 delay: "{{ retry_stagger | random + 3 }}" when: "{{ download.enabled|bool and not download.container|bool }}" - name: Extract archives unarchive: src: "{{ local_release_dir }}/{{download.dest}}" dest: "{{ local_release_dir }}/{{download.dest|dirname}}" owner: "{{ download.owner|default(omit) }}" mode: "{{ download.mode|default(omit) }}" copy: no when: "{{ download.enabled|bool and not download.container|bool and download.unarchive is defined and download.unarchive == True }}" - name: Fix permissions file: state: file path: "{{local_release_dir}}/{{download.dest}}" owner: "{{ download.owner|default(omit) }}" mode: "{{ download.mode|default(omit) }}" when: "{{ download.enabled|bool and not download.container|bool and (download.unarchive is not defined or download.unarchive == False) }}" - name: pulling... debug: msg: "{{ download.repo }}:{{ download.tag }}" when: "{{ download.enabled|bool and download.container|bool }}" - set_fact: download_delegate: "{% if download_localhost %}localhost{% else %}{{groups['kube-master'][0]}}{% endif %}" - name: Create dest directory for saved/loaded container images file: path="{{local_release_dir}}/containers" state=directory recurse=yes mode=0755 owner={{ansible_ssh_user|default(ansible_user_id)}} when: "{{ download.enabled|bool and download.container|bool }}" # This is required for the download_localhost delegate to work smooth with CoreOS cluster nodes - name: Hack python binary path for localhost raw: sh -c "mkdir -p /opt/bin; ln -sf /usr/bin/python /opt/bin/python" when: "{{ download_delegate == 'localhost' }}" delegate_to: localhost ignore_errors: true run_once: true - name: Download | create local directory for saved/loaded container images file: path="{{local_release_dir}}/containers" state=directory recurse=yes delegate_to: localhost become: false run_once: true when: "{{ download_run_once|bool and download.enabled|bool and download.container|bool and download_delegate == 'localhost' }}" #NOTE(bogdando) this brings no docker-py deps for nodes - name: Download containers command: "/usr/bin/docker pull {{ download.repo }}:{{ download.tag }}" register: pull_task_result until: pull_task_result|success retries: 4 delay: "{{ retry_stagger | random + 3 }}" when: "{{ download.enabled|bool and download.container|bool }}" delegate_to: "{{ download_delegate if download_run_once|bool else inventory_hostname }}" run_once: "{{ download_run_once|bool }}" - set_fact: fname: "{{local_release_dir}}/containers/{{download.repo|regex_replace('/|\0|:', '_')}}:{{download.tag|regex_replace('/|\0|:', '_')}}.tar" - name: "Set default value for 'container_changed' to false" set_fact: container_changed: false - name: "Update the 'container_changed' fact" set_fact: container_changed: "{{ not 'up to date' in pull_task_result.stdout }}" when: "{{ download.enabled|bool and download.container|bool }}" delegate_to: "{{ download_delegate if download_run_once|bool else inventory_hostname }}" run_once: "{{ download_run_once|bool }}" - name: Stat saved container image stat: path="{{fname}}" register: img changed_when: false when: "{{ download.enabled|bool and download.container|bool and download_run_once|bool }}" delegate_to: "{{ download_delegate }}" become: false run_once: true - name: Download | save container images shell: docker save "{{ download.repo }}:{{ download.tag }}" | gzip -{{ download_compress }} > "{{ fname }}" delegate_to: "{{ download_delegate }}" register: saved run_once: true when: (ansible_os_family != "CoreOS" or download_delegate == "localhost") and download_run_once|bool and download.enabled|bool and download.container|bool and (container_changed|bool or not img.stat.exists) - name: Download | copy container images to ansible host synchronize: src: "{{ fname }}" dest: "{{ fname }}" mode: pull delegate_to: localhost become: false when: ansible_os_family != "CoreOS" and inventory_hostname == groups['kube-master'][0] and download_delegate != "localhost" and download_run_once|bool and download.enabled|bool and download.container|bool and saved.changed - name: Download | upload container images to nodes synchronize: src: "{{ fname }}" dest: "{{ fname }}" mode: push delegate_to: localhost become: false register: get_task until: get_task|success retries: 4 delay: "{{ retry_stagger | random + 3 }}" when: (ansible_os_family != "CoreOS" and inventory_hostname != groups['kube-master'][0] or download_delegate == "localhost") and download_run_once|bool and download.enabled|bool and download.container|bool - name: Download | load container images shell: docker load < "{{ fname }}" when: (ansible_os_family != "CoreOS" and inventory_hostname != groups['kube-master'][0] or download_delegate == "localhost") and download_run_once|bool and download.enabled|bool and download.container|bool