2 # ============LICENSE_START=======================================================
3 # Copyright (C) 2019 The Nordix Foundation. All rights reserved.
4 # ================================================================================
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
17 # SPDX-License-Identifier: Apache-2.0
18 # ============LICENSE_END=========================================================
20 - name: Create directory to store container images
22 path: "{{ containers_folder }}"
28 - name: Set versions of k8s components in Kubespray downloads role
30 path: "{{ git_folder }}/kubespray/roles/download/defaults/main.yml"
31 regexp: "{{ item.regexp }}"
32 line: "{{ item.line }}"
34 - {regexp: "^kube_version:.*", line: "kube_version: {{ kubernetes_version }}"}
35 - {regexp: "^helm_version:.*", line: "helm_version: {{ helm_version }}"}
37 # NOTE (fdegir): order of vars files is significant
38 - name: Include kubespray vars files
39 include_vars: "{{ item }}"
41 - "{{ git_folder }}/kubespray/roles/kubespray-defaults/defaults/main.yaml"
42 - "{{ git_folder }}/kubespray/roles/download/defaults/main.yml"
44 - name: Remove outdated kubeadm-images.yaml file
46 path: "/tmp/kubeadm-images.yaml"
49 - name: Generate kubeadm-images.yaml to fetch container images
51 src: "kubeadm-images.yaml.j2"
52 dest: "/tmp/kubeadm-images.yaml"
55 # NOTE (fdegir): the tasks below are taken from kubespray/roles/download/tasks/prep_kubeadm_images.yml
56 - name: Get list of kubeadm images
59 {{ binaries_folder }}/kubeadm config images list --config=/tmp/kubeadm-images.yaml | grep -v coredns
62 register: kubeadm_images_raw
66 - name: Parse list of kubeadm images
68 kubeadm_images_list: "{{ kubeadm_images_raw.stdout_lines }}"
71 key: "kubeadm_{{ (item | regex_replace('^(?:.*\\/)*','')).split(':')[0] }}"
75 repo: "{{ item | regex_replace('^(.*):.*$','\\1') }}"
76 tag: "{{ item | regex_replace('^.*:(.*)$','\\1') }}"
77 loop: "{{ kubeadm_images_list | flatten(levels=1) }}"
78 register: kubeadm_images_cooked
81 - name: Convert list of kubeadm images to dict
83 kubeadm_images: "{{ kubeadm_images_cooked.results | map(attribute='ansible_facts.kubeadm_image') | list | items2dict }}"
86 # NOTE (fdegir): docker_image module doesn't seem to respect become so falling back to command module
87 - name: Pull kubeadm container images
88 command: "docker pull {{ kubeadm_images[item.key].repo }}:{{ kubeadm_images[item.key].tag }}"
89 with_dict: "{{ kubeadm_images }}"
93 - name: Pull tiller container image (helm v2 only)
94 command: "docker pull {{ downloads['tiller'].repo }}:{{ downloads['tiller'].tag }}"
97 when: helm_version is version('v3.0.0', '<')
99 - name: Pull misc container images
100 command: "docker pull {{ downloads[item].repo }}:{{ downloads[item].tag }}"
101 loop: "{{ k8s_misc_images }}"
104 when: downloads[item].container is defined and downloads[item].container
106 - name: Pull other container images
107 command: "docker pull {{ other_images[item.key].repo }}:{{ other_images[item.key].tag }}"
108 with_dict: "{{ other_images }}"
112 # save container images
113 - name: Save kubeadm container images
115 docker save {{ kubeadm_images[item.key].repo }}:{{ kubeadm_images[item.key].tag }}
116 -o {{ kubeadm_images[item.key].repo | replace('/', '_') }}_{{ kubeadm_images[item.key].tag }}.tar
117 with_dict: "{{ kubeadm_images }}"
119 chdir: "{{ containers_folder }}"
123 - name: Save misc container images
125 docker save {{ downloads[item].repo }}:{{ downloads[item].tag }}
126 -o {{ downloads[item].repo }} -o {{ downloads[item].repo | replace('/', '_') }}_{{ downloads[item].tag }}.tar
127 loop: "{{ k8s_misc_images }}"
129 chdir: "{{ containers_folder }}"
132 when: downloads[item].container is defined and downloads[item].container
134 - name: Save tiller container image (helm v2 only)
136 docker save {{ downloads['tiller'].repo }}:{{ downloads['tiller'].tag }}
137 -o {{ downloads['tiller'].repo }} -o {{ downloads['tiller'].repo | replace('/', '_') }}_{{ downloads['tiller'].tag }}.tar
139 chdir: "{{ containers_folder }}"
142 when: helm_version is version('v3.0.0', '<')
144 - name: Save other container images
146 docker save {{ other_images[item.key].repo }}:{{ other_images[item.key].tag }}
147 -o {{ other_images[item.key].repo | replace('/', '_') }}_{{ other_images[item.key].tag }}.tar
148 with_dict: "{{ other_images }}"
150 chdir: "{{ containers_folder }}"
154 # NOTE (fdegir): archive fails due to wrong permissions so we fix them
155 - name: Fix container image permissions
157 path: "{{ containers_folder }}"
163 # vim: set ts=2 sw=2 expandtab: