Create engine kubernetes stack
[infra/stack/kubernetes.git] / playbooks / roles / package / tasks / containers.yaml
diff --git a/playbooks/roles/package/tasks/containers.yaml b/playbooks/roles/package/tasks/containers.yaml
new file mode 100644 (file)
index 0000000..9101950
--- /dev/null
@@ -0,0 +1,145 @@
+---
+# ============LICENSE_START=======================================================
+#  Copyright (C) 2019 The Nordix Foundation. All rights reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+- name: Create directory to store container images
+  file:
+    path: "{{ containers_folder }}"
+    state: "{{ item }}"
+  with_items:
+    - absent
+    - directory
+
+- name: Set versions of k8s components in Kubespray downloads role
+  lineinfile:
+    path: "{{ git_folder }}/kubespray/roles/download/defaults/main.yml"
+    regexp: "{{ item.regexp }}"
+    line: "{{ item.line }}"
+  with_items:
+    - {regexp: "^kube_version:.*", line: "kube_version: {{ kubernetes_version }}"}
+    - {regexp: "^helm_version:.*", line: "helm_version: {{ helm_version }}"}
+
+# NOTE (fdegir): order of vars files is significant
+- name: Include kubespray vars files
+  include_vars: "{{ item }}"
+  with_items:
+    - "{{ git_folder }}/kubespray/roles/kubespray-defaults/defaults/main.yaml"
+    - "{{ git_folder }}/kubespray/roles/download/defaults/main.yml"
+
+- name: Remove outdated kubeadm-images.yaml file
+  file:
+    path: "/tmp/kubeadm-images.yaml"
+    state: absent
+
+- name: Generate kubeadm-images.yaml to fetch container images
+  template:
+    src: "kubeadm-images.yaml.j2"
+    dest: "/tmp/kubeadm-images.yaml"
+    force: true
+
+# NOTE (fdegir): the tasks below are taken from kubespray/roles/download/tasks/prep_kubeadm_images.yml
+- name: Get list of kubeadm images
+  shell: |
+    set -o pipefail
+    {{ binaries_folder }}/kubeadm config images list --config=/tmp/kubeadm-images.yaml | grep -v coredns
+  args:
+    executable: /bin/bash
+  register: kubeadm_images_raw
+  run_once: true
+  changed_when: false
+
+- name: Parse list of kubeadm images
+  vars:
+    kubeadm_images_list: "{{ kubeadm_images_raw.stdout_lines }}"
+  set_fact:
+    kubeadm_image:
+      key: "kubeadm_{{ (item | regex_replace('^(?:.*\\/)*','')).split(':')[0] }}"
+      value:
+        enabled: true
+        container: true
+        repo: "{{ item | regex_replace('^(.*):.*$','\\1') }}"
+        tag: "{{ item | regex_replace('^.*:(.*)$','\\1') }}"
+  loop: "{{ kubeadm_images_list | flatten(levels=1) }}"
+  register: kubeadm_images_cooked
+  run_once: true
+
+- name: Convert list of kubeadm images to dict
+  set_fact:
+    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
+  changed_when: false
+
+- name: Pull misc container images
+  command: "docker pull {{ downloads[item].repo }}:{{ downloads[item].tag }}"
+  loop: "{{ k8s_misc_images }}"
+  become: true
+  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
+  changed_when: false
+
+# 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: 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 }}"
+  become: true
+  changed_when: false
+
+- 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 }}"
+  args:
+    chdir: "{{ containers_folder }}"
+  become: true
+  changed_when: false
+
+# NOTE (fdegir): archive fails due to wrong permissions so we fix them
+- name: Fix container image permissions
+  file:
+    path: "{{ containers_folder }}"
+    state: directory
+    recurse: true
+    mode: 0755
+  become: true
+
+# vim: set ts=2 sw=2 expandtab: