--- - name: Include custom vars for ci job include_vars: "../files/{{ ci_job_name }}.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"