Packer.Images/ansible/roles/metacluster/tasks/components.yml

133 lines
6.2 KiB
YAML
Raw Normal View History

- name: Create folder structure(s)
ansible.builtin.file:
path: "{{ item }}"
state: directory
loop:
- /opt/metacluster/helm-charts
- /opt/metacluster/manifests/bootstrap-kubeadm/{{ components.clusterapi.manifest.version.base }}
- /opt/metacluster/manifests/cluster-api/{{ components.clusterapi.manifest.version.base }}
- /opt/metacluster/manifests/control-plane-kubeadm/{{ components.clusterapi.manifest.version.base }}
- /opt/metacluster/manifests/infrastructure-vsphere/{{ components.clusterapi.manifest.version.infrastructure_vsphere }}
2022-07-06 14:09:21 +00:00
- /opt/metacluster/container-images
- name: Add helm repositories
kubernetes.core.helm_repository:
2022-06-24 22:54:36 +00:00
name: "{{ item.name }}"
repo_url: "{{ item.url }}"
state: present
loop: "{{ platform.helm_repositories }}"
- name: Fetch helm charts
ansible.builtin.command:
cmd: helm fetch {{ item.value.helm.chart }} --untar --version {{ item.value.helm.version }}
chdir: /opt/metacluster/helm-charts
when: item.value.helm is defined
loop: "{{ lookup('ansible.builtin.dict', components) }}"
loop_control:
label: "{{ item.key }}"
2022-07-09 07:18:13 +00:00
- block:
2022-07-09 07:26:13 +00:00
- name: Aggregate chart_values into dict
ansible.builtin.set_fact:
2022-07-11 11:37:55 +00:00
chart_values: "{{ chart_values | default({}) | combine({ (item.key | regex_replace('[^A-Za-z0-9]', '')): { 'chart_values': (item.value.helm.chart_values | from_yaml) } }) }}"
2022-07-09 21:37:57 +00:00
when: item.value.helm.chart_values is defined
2022-07-09 07:26:13 +00:00
loop: "{{ lookup('ansible.builtin.dict', components) }}"
loop_control:
label: "{{ item.key }}"
2022-07-09 21:37:57 +00:00
- name: Write dict to vars_file
2022-07-11 07:24:04 +00:00
ansible.builtin.copy:
dest: /opt/firstboot/ansible/vars/metacluster.yml
content: "{{ { 'components': chart_values } | to_nice_yaml(indent=2, width=4096) }}"
2022-10-17 09:13:13 +00:00
- block:
- name: Download ClusterAPI manifests
2022-10-17 09:13:13 +00:00
ansible.builtin.get_url:
url: https://github.com/kubernetes-sigs/{{ item.url }}
dest: /opt/metacluster/manifests/{{ item.dest }}
register: clusterapi_manifests
loop:
# This list is based on `clusterctl config repositories`
# Note: Each manifest also needs a metadata.yaml file stored in the respective folder
- url: cluster-api/releases/{{ components.cluster-api.manifest.version.base }}/download/bootstrap-components.yaml
dest: bootstrap-kubeadm/{{ components.cluster-api.manifest.version.base }}/bootstrap-components.yaml
- url: cluster-api/releases/{{ components.cluster-api.manifest.version.base }}/download/core-components.yaml
dest: cluster-api/{{ components.cluster-api.manifest.version.base }}/core-components.yaml
- url: cluster-api/releases/{{ components.cluster-api.manifest.version.base }}/download/control-plane-components.yaml
dest: control-plane-kubeadm/{{ components.cluster-api.manifest.version.base }}/control-plane-components.yaml
- url: cluster-api-provider-vsphere/releases/{{ components.cluster-api.manifest.version.infrastructure-vsphere }}/download/infrastructure-components.yaml
dest: infrastructure-vsphere/{{ components.cluster-api.manifest.version.infrastructure-vsphere }}/infrastructure-components.yaml
- url: cluster-api-provider-vsphere/releases/{{ components.cluster-api.manifest.version.infrastructure-vsphere }}/download/metadata.yaml
dest: infrastructure-vsphere/{{ components.cluster-api.manifest.version.infrastructure-vsphere }}/metadata.yaml
# This downloads the same metadata.yaml file to three separate folders
- url: cluster-api/releases/{{ components.cluster-api.manifest.version.base }}/download/metadata.yaml
dest: bootstrap-kubeadm/{{ components.cluster-api.manifest.version.base }}/metadata.yaml
- url: cluster-api/releases/{{ components.cluster-api.manifest.version.base }}/download/metadata.yaml
dest: cluster-api/{{ components.cluster-api.manifest.version.base }}/metadata.yaml
- url: cluster-api/releases/{{ components.cluster-api.manifest.version.base }}/download/metadata.yaml
dest: control-plane-kubeadm/{{ components.cluster-api.manifest.version.base }}/metadata.yaml
2022-10-17 12:28:59 +00:00
loop_control:
label: "{{ item.url | basename }}"
2022-10-17 09:13:13 +00:00
- debug:
var: clusterapi_manifests
# - name: Parse manifests
# ansible.builtin.shell:
# cmd: cat {{ item | basename }} | yq --no-doc eval '.. | .image? | select(.)' | awk '!/ /' | sort
# chdir: /opt/metacluster/manifests
# register: parsedmanifests
# loop: "{{ clusterapi_manifests.stdout_lines | sort }}"
# loop_control:
# label: "{{ item | basename }}"
2022-10-17 09:13:13 +00:00
# - name: Store container images
# ansible.builtin.set_fact:
# clusterapi_containerimages: "{{ parsedmanifests | json_query('results[*].stdout') }}"
2022-10-17 09:13:13 +00:00
# - name: Configure clusterctl
# ansible.builtin.template:
# src: clusterctl.j2
# dest: /opt/metacluster/manifests/clusterctl.yaml
# vars:
# _template:
# hv:
# username:
# password:
# fqdn:
# version:
# base:
# infrastructure_vsphere:
2022-10-17 19:30:06 +00:00
- name: Parse helm charts for container images
ansible.builtin.shell:
cmd: "{{ item.value.helm.parse_logic }}"
chdir: /opt/metacluster/helm-charts/{{ item.key }}
register: containerimages
loop: "{{ lookup('ansible.builtin.dict', components) }}"
loop_control:
label: "{{ item.key }}"
2022-10-17 19:03:13 +00:00
- name: Pull and store containerimages
2022-07-06 14:32:39 +00:00
ansible.builtin.shell:
2022-07-06 12:36:30 +00:00
cmd: >-
skopeo copy \
2022-07-27 12:23:33 +00:00
--insecure-policy \
2022-07-06 14:09:21 +00:00
--retry-times=5 \
2022-07-06 12:36:30 +00:00
docker://{{ item }} \
docker-archive:./{{ ( item | regex_findall('[^/:]+'))[-2] }}.tar:{{ item }}
chdir: /opt/metacluster/container-images
2022-10-17 11:47:32 +00:00
loop: "{{ ((containerimages.results | map(attribute='stdout_lines') | flatten) + dependencies.container_images + (clusterapi_containerimages | list)) | unique }}"
2022-07-15 10:14:12 +00:00
# - name: Inject manifests
# ansible.builtin.template:
# src: "{{ item.type }}.j2"
# dest: /var/lib/rancher/k3s/server/manifests/{{ item.name }}-manifest.yaml
# owner: root
# group: root
# mode: 0600
# loop: "{{ lookup('ansible.builtin.dict', components) | map(attribute='value.manifests') | list | select('defined') | flatten }}"
# loop_control:
# label: "{{ item.type + '/' + item.name }}"