67 lines
2.3 KiB
YAML
67 lines
2.3 KiB
YAML
---
|
|
- name: Download | Prepare working directories and variables
|
|
import_tasks: prep_download.yml
|
|
when:
|
|
- not skip_downloads
|
|
tags:
|
|
- download
|
|
- upload
|
|
|
|
- name: Download | Get kubeadm binary and list of required images
|
|
include_tasks: prep_kubeadm_images.yml
|
|
when:
|
|
- not skip_downloads
|
|
- inventory_hostname in groups['kube_control_plane']
|
|
tags:
|
|
- download
|
|
- upload
|
|
|
|
- name: Download | Download files / images
|
|
include_tasks: "{{ include_file }}"
|
|
loop: "{{ downloads | combine(kubeadm_images) | dict2items }}"
|
|
vars:
|
|
download: "{{ download_defaults | combine(item.value) }}"
|
|
include_file: "download_{% if download.container %}container{% else %}file{% endif %}.yml"
|
|
kubeadm_images: "{{ skip_kubeadm_images | ternary({}, _kubeadm_images) }}"
|
|
# The trick (converting list of tuples to list of dicts) below come from
|
|
# https://docs.ansible.com/ansible/latest/collections/community/general/dict_filter.html#examples
|
|
_kubeadm_images: "{{ dict(names | map('regex_replace', '^(.*)', 'kubeadm_\\1') |
|
|
zip( repos | zip(_tags, _groups) |
|
|
map('zip', keys) | map('map', 'reverse') | map('community.general.dict') |
|
|
map('combine', defaults))) |
|
|
dict2items | rejectattr('key', 'in', excluded) | items2dict }}"
|
|
keys:
|
|
- repo
|
|
- tag
|
|
- groups
|
|
images: "{{ kubeadm_images_raw.stdout_lines | map('split', ':') }}"
|
|
_tags: "{{ images | map(attribute=1) }}"
|
|
repos: "{{ images | map(attribute=0) }}"
|
|
names: "{{ repos | map('split', '/') | map(attribute=-1) }}"
|
|
_groups: "{{ names | map('extract', images_groups) }}"
|
|
defaults:
|
|
enabled: true
|
|
container: true
|
|
excluded:
|
|
- kubeadm_coredns
|
|
- kubeadm_pause
|
|
images_groups:
|
|
coredns: []
|
|
pause: []
|
|
kube-proxy:
|
|
- k8s_cluster
|
|
etcd:
|
|
- etcd
|
|
kube-scheduler:
|
|
- kube_control_plane
|
|
kube-controller-manager:
|
|
- kube_control_plane
|
|
kube-apiserver:
|
|
- kube_control_plane
|
|
when:
|
|
- not skip_downloads
|
|
- download.enabled
|
|
- item.value.enabled
|
|
- (not (item.value.container | default(false))) or (item.value.container and download_container)
|
|
- (download_run_once and inventory_hostname == download_delegate) or (group_names | intersect(download.groups) | length)
|