kubeadm_images: "{{ kubeadm_images_cooked.results | map(attribute='ansible_facts.kubeadm_image') | list | items2dict }}"
run_once: true
-# NOTE (fdegir): docker_image module doesn't seem to respect become so falling back to command module
-- name: Pull kubeadm container images
- command: "docker pull {{ kubeadm_images[item.key].repo }}:{{ kubeadm_images[item.key].tag }}"
- with_dict: "{{ kubeadm_images }}"
- become: true
+- name: Populate list of images to pull and save with those specified by Kubespray
+ vars:
+ image_list: []
+ set_fact:
+ image_list: "{{ image_list }} + [ '{{ downloads[item].repo }}:{{ downloads[item].tag }}' ]"
+ loop: "{{ k8s_misc_images }}"
changed_when: false
+ when: downloads[item].container is defined and downloads[item].container
-- name: Pull tiller container image (helm v2 only)
- command: "docker pull {{ downloads['tiller'].repo }}:{{ downloads['tiller'].tag }}"
- become: true
+- name: Populate list of images to pull and save with those specified by Kubeadm
+ set_fact:
+ image_list: "{{ image_list }} + [ '{{ item.value.repo }}:{{ item.value.tag }}' ]"
+ loop: "{{ kubeadm_images | dict2items }}"
changed_when: false
- when: helm_version is version('v3.0.0', '<')
-- name: Pull misc container images
- command: "docker pull {{ downloads[item].repo }}:{{ downloads[item].tag }}"
- loop: "{{ k8s_misc_images }}"
- become: true
+- name: Populate list of images to pull and save with other miscellaneous images
+ set_fact:
+ image_list: "{{ image_list }} + [ '{{ item.value.repo }}:{{ item.value.tag }}' ]"
+ loop: "{{ other_images | dict2items }}"
changed_when: false
-- name: Pull other container images
- command: "docker pull {{ other_images[item.key].repo }}:{{ other_images[item.key].tag }}"
- with_dict: "{{ other_images }}"
- become: true
+- name: Add tiller container image to list of images (helm v2 only)
+ set_fact:
+ image_list: "{{ image_list }} + [ '{{ downloads['tiller'].repo }}:{{ downloads['tiller'].tag }}' ]"
changed_when: false
+ when: helm_version is version('v3.0.0', '<')
-# save container images
-- name: Save kubeadm container images
- command: |-
- docker save {{ kubeadm_images[item.key].repo }}:{{ kubeadm_images[item.key].tag }}
- -o {{ kubeadm_images[item.key].repo | replace('/', '_') }}_{{ kubeadm_images[item.key].tag }}.tar
- with_dict: "{{ kubeadm_images }}"
- args:
- chdir: "{{ containers_folder }}"
- become: true
- changed_when: false
+- name: Dump image list to disk
+ copy:
+ content: "{{ image_list | join('\n') }}"
+ dest: "{{ engine_cache }}/images.txt"
-- name: Save misc container images
- command: |-
- docker save {{ downloads[item].repo }}:{{ downloads[item].tag }}
- -o {{ downloads[item].repo }} -o {{ downloads[item].repo | replace('/', '_') }}_{{ downloads[item].tag }}.tar
- loop: "{{ k8s_misc_images }}"
- args:
- chdir: "{{ containers_folder }}"
+- name: Pull images (using pull-images.sh)
+ vars:
+ container_tool: docker
+ container_pull_parallel: 4
+ images_txt: "{{ engine_cache }}/images.txt"
+ script: pull-images.sh -l {{ images_txt }} -c {{ container_tool }} -p {{ container_pull_parallel }}
become: true
- changed_when: false
+ register: pull_images_output_raw
+ changed_when: pull_images_output_raw.stdout is search("downloaded newer image for", ignorecase=true)
-- name: Save tiller container image (helm v2 only)
- command: |-
- docker save {{ downloads['tiller'].repo }}:{{ downloads['tiller'].tag }}
- -o {{ downloads['tiller'].repo }} -o {{ downloads['tiller'].repo | replace('/', '_') }}_{{ downloads['tiller'].tag }}.tar
+- name: Save images (using save-images.sh)
+ vars:
+ container_tool: docker
+ images_txt: "{{ engine_cache }}/images.txt"
+ images_output: "{{ containers_folder }}/images.tar"
+ script: save-images.sh -l {{ images_txt }} -c {{ container_tool }} -o {{ images_output }}
args:
- chdir: "{{ containers_folder }}"
+ creates: "{{ images_output }}"
become: true
- changed_when: false
- when: helm_version is version('v3.0.0', '<')
-- name: Save other container images
- command: |-
- docker save {{ other_images[item.key].repo }}:{{ other_images[item.key].tag }}
- -o {{ other_images[item.key].repo | replace('/', '_') }}_{{ other_images[item.key].tag }}.tar
- with_dict: "{{ other_images }}"
+- name: Save registry image separately
+ vars:
+ img: "{{ other_images['docker-registry'].repo }}:{{ other_images['docker-registry'].tag }}"
+ dest: "{{ img | regex_replace('[/:]', '_') }}.tar"
+ shell: |-
+ set -o pipefail && \
+ docker save {{ img }} -o {{ dest }}
args:
+ executable: "/bin/bash"
chdir: "{{ containers_folder }}"
+ creates: "{{ containers_folder }}/{{ dest }}"
become: true
- changed_when: false
# NOTE (fdegir): archive fails due to wrong permissions so we fix them
- name: Fix container image permissions