From 47f67818b60c38a54e1caef2d0f2f7f02e349d48 Mon Sep 17 00:00:00 2001 From: Max Gautier Date: Wed, 13 Nov 2024 17:25:59 +0100 Subject: [PATCH] CI: (packet-ci) simplify role layout --- .../roles/packet-ci/tasks/create-vms.yml | 49 ----------------- .../roles/packet-ci/tasks/main.yml | 54 +++++++++++++++++-- 2 files changed, 50 insertions(+), 53 deletions(-) delete mode 100644 tests/cloud_playbooks/roles/packet-ci/tasks/create-vms.yml diff --git a/tests/cloud_playbooks/roles/packet-ci/tasks/create-vms.yml b/tests/cloud_playbooks/roles/packet-ci/tasks/create-vms.yml deleted file mode 100644 index beed40c45..000000000 --- a/tests/cloud_playbooks/roles/packet-ci/tasks/create-vms.yml +++ /dev/null @@ -1,49 +0,0 @@ ---- -- name: Start vms for CI job - vars: - # Workaround for compatibility when testing upgrades with old == before e9d406ed088d4291ef1d9018c170a4deed2bf928 - # TODO: drop after 2.27.0 - legacy_groups: "{{ (['kube_control_plane', 'kube_node', 'calico_rr'] | intersect(item) | length > 0) | ternary(['k8s_cluster'], []) }}" - tvars: - kubespray_groups: "{{ item + legacy_groups }}" - kubernetes.core.k8s: - definition: "{{ lookup('template', 'vm.yml.j2', template_vars=tvars) }}" - loop: "{{ scenarios[mode | d('default')] }}" - -- name: Wait for vms to have IP addresses - kubernetes.core.k8s_info: - api_version: kubevirt.io/v1 - kind: VirtualMachineInstance - label_selectors: - - "ci_job_id={{ ci_job_id }}" - namespace: "{{ pod_namespace }}" - register: vmis - until: vmis.resources - | map(attribute='status.interfaces.0') - | rejectattr('ipAddress', 'defined') == [] - retries: 30 - delay: 10 - -- name: Massage VirtualMachineInstance data into an Ansible inventory structure - vars: - ips: "{{ vmis.resources | map(attribute='status.interfaces.0.ipAddress') }}" - names: "{{ vmis.resources | map(attribute='metadata.name') }}" - _groups: "{{ vmis.resources | map(attribute='metadata.annotations.ansible_groups') | map('split', ',') }}" - hosts: "{{ ips | zip(_groups, names) - | map('zip', ['ansible_host', 'ansible_groups', 'k8s_vmi_name']) - | map('map', 'reverse') | map('community.general.dict') }}" - loop: "{{ hosts | map(attribute='ansible_groups') | flatten | unique }}" - set_fact: - ci_inventory: "{{ ci_inventory|d({}) | combine({ - item: { - 'hosts': hosts | selectattr('ansible_groups', 'contains', item) - | rekey_on_member('k8s_vmi_name') - } - }) - }}" - -- name: Create inventory for CI tests - copy: - content: "{{ ci_inventory | to_yaml }}" - dest: "{{ inventory_path }}/ci_inventory.yml" - mode: "0644" diff --git a/tests/cloud_playbooks/roles/packet-ci/tasks/main.yml b/tests/cloud_playbooks/roles/packet-ci/tasks/main.yml index 3ab879742..de6e48821 100644 --- a/tests/cloud_playbooks/roles/packet-ci/tasks/main.yml +++ b/tests/cloud_playbooks/roles/packet-ci/tasks/main.yml @@ -1,6 +1,52 @@ --- - -- name: "Include custom vars for ci job: {{ ci_job_name }}" +- name: Include custom vars for ci job include_vars: "../files/{{ ci_job_name }}.yml" -- name: Create VMs - import_tasks: create-vms.yml + +- name: Start vms for CI job + vars: + # Workaround for compatibility when testing upgrades with old == before e9d406ed088d4291ef1d9018c170a4deed2bf928 + # TODO: drop after 2.27.0 + legacy_groups: "{{ (['kube_control_plane', 'kube_node', 'calico_rr'] | intersect(item) | length > 0) | ternary(['k8s_cluster'], []) }}" + tvars: + kubespray_groups: "{{ item + legacy_groups }}" + kubernetes.core.k8s: + definition: "{{ lookup('template', 'vm.yml.j2', template_vars=tvars) }}" + loop: "{{ scenarios[mode | d('default')] }}" + +- name: Wait for vms to have IP addresses + kubernetes.core.k8s_info: + api_version: kubevirt.io/v1 + kind: VirtualMachineInstance + label_selectors: + - "ci_job_id={{ ci_job_id }}" + namespace: "{{ pod_namespace }}" + register: vmis + until: vmis.resources + | map(attribute='status.interfaces.0') + | rejectattr('ipAddress', 'defined') == [] + retries: 30 + delay: 10 + +- name: Massage VirtualMachineInstance data into an Ansible inventory structure + vars: + ips: "{{ vmis.resources | map(attribute='status.interfaces.0.ipAddress') }}" + names: "{{ vmis.resources | map(attribute='metadata.name') }}" + _groups: "{{ vmis.resources | map(attribute='metadata.annotations.ansible_groups') | map('split', ',') }}" + hosts: "{{ ips | zip(_groups, names) + | map('zip', ['ansible_host', 'ansible_groups', 'k8s_vmi_name']) + | map('map', 'reverse') | map('community.general.dict') }}" + loop: "{{ hosts | map(attribute='ansible_groups') | flatten | unique }}" + set_fact: + ci_inventory: "{{ ci_inventory|d({}) | combine({ + item: { + 'hosts': hosts | selectattr('ansible_groups', 'contains', item) + | rekey_on_member('k8s_vmi_name') + } + }) + }}" + +- name: Create inventory for CI tests + copy: + content: "{{ ci_inventory | to_yaml }}" + dest: "{{ inventory_path }}/ci_inventory.yml" + mode: "0644"