From c46e5dc33a890dde4d2c137fa247c0319eeaecb0 Mon Sep 17 00:00:00 2001 From: Max Gautier Date: Sat, 14 Sep 2024 14:51:27 +0200 Subject: [PATCH] CI: use VirtualMachineInstance for VMs VMI in Kubevirt are the abstraction below VirtualMachine. - We don't really need the extra abstraction of VirtualMachine objects - Convert the waiting for VMs ip address to use kubernetes.core.k8s_info and no shell pipeline --- .../roles/packet-ci/tasks/create-vms.yml | 26 +++--- .../roles/packet-ci/templates/vm.yml.j2 | 81 +++++++++---------- 2 files changed, 51 insertions(+), 56 deletions(-) diff --git a/tests/cloud_playbooks/roles/packet-ci/tasks/create-vms.yml b/tests/cloud_playbooks/roles/packet-ci/tasks/create-vms.yml index 28ef298ab..c4deca530 100644 --- a/tests/cloud_playbooks/roles/packet-ci/tasks/create-vms.yml +++ b/tests/cloud_playbooks/roles/packet-ci/tasks/create-vms.yml @@ -20,19 +20,19 @@ changed_when: false loop: "{{ vms_files }}" -- name: Wait for vms to have ipaddress assigned - shell: "set -o pipefail && kubectl get vmis -n {{ test_name }} instance-{{ vm_id }} -o json | jq '.status.interfaces[].ipAddress' | tr -d '\"'" - args: - executable: /bin/bash - changed_when: false - register: vm_ips - loop: "{{ range(1, vm_count | int + 1, 1) | list }}" - loop_control: - index_var: vm_id - retries: 20 - delay: 15 - until: - - vm_ips.stdout | ansible.utils.ipaddr +- 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: "Create inventory for CI test in file /tmp/{{ test_name }}/inventory" template: diff --git a/tests/cloud_playbooks/roles/packet-ci/templates/vm.yml.j2 b/tests/cloud_playbooks/roles/packet-ci/templates/vm.yml.j2 index f5f7cc02a..98c64a8ce 100644 --- a/tests/cloud_playbooks/roles/packet-ci/templates/vm.yml.j2 +++ b/tests/cloud_playbooks/roles/packet-ci/templates/vm.yml.j2 @@ -1,6 +1,6 @@ --- apiVersion: kubevirt.io/v1 -kind: VirtualMachine +kind: VirtualMachineInstance metadata: generateName: test-vm- namespace: {{ pod_namespace }} @@ -8,6 +8,8 @@ metadata: kubespray.com/ci.template-path: "tests/cloud_playbooks/roles/packet-ci/templates/vm.yml.j2" labels: kubevirt.io/os: {{ cloud_image }} + kubevirt.io/size: small + kubevirt.io/domain: "{{ test_name }}" ci_job_id: "{{ ci_job_id }}" ci_job_name: "{{ ci_job_name }}" # leverage the Kubernetes GC for resources cleanup @@ -17,46 +19,39 @@ metadata: name: "{{ pod_name }}" uid: "{{ pod_uid }}" spec: - running: true - template: - metadata: - labels: - kubevirt.io/size: small - kubevirt.io/domain: "{{ test_name }}" - spec: - domain: - devices: - blockMultiQueue: true - disks: - - disk: - bus: virtio - name: containervolume - cache: writethrough - - disk: - bus: virtio - name: cloudinitvolume - interfaces: - - name: default - bridge: {} - cpu: - cores: {{ vm_cpu_cores }} - sockets: {{ vm_cpu_sockets }} - threads: {{ vm_cpu_threads }} - resources: - requests: - memory: "{{ vm_memory * memory_allocation_ratio }}Mi" - cpu: {{ vm_cpu_cores * cpu_allocation_ratio }} - limits: - memory: "{{ vm_memory }}Mi" - cpu: {{ vm_cpu_cores }} - networks: + domain: + devices: + blockMultiQueue: true + disks: + - disk: + bus: virtio + name: containervolume + cache: writethrough + - disk: + bus: virtio + name: cloudinitvolume + interfaces: - name: default - pod: {} - terminationGracePeriodSeconds: 0 - volumes: - - name: containervolume - containerDisk: - image: quay.io/kubespray/vm-{{ cloud_image }} - - name: cloudinitvolume - cloudInitNoCloud: - userDataBase64: {{ cloud_init[cloud_image] }} + bridge: {} + cpu: + cores: {{ vm_cpu_cores }} + sockets: {{ vm_cpu_sockets }} + threads: {{ vm_cpu_threads }} + resources: + requests: + memory: "{{ vm_memory * memory_allocation_ratio }}Mi" + cpu: {{ vm_cpu_cores * cpu_allocation_ratio }} + limits: + memory: "{{ vm_memory }}Mi" + cpu: {{ vm_cpu_cores }} + networks: + - name: default + pod: {} + terminationGracePeriodSeconds: 0 + volumes: + - name: containervolume + containerDisk: + image: quay.io/kubespray/vm-{{ cloud_image }} + - name: cloudinitvolume + cloudInitNoCloud: + userDataBase64: {{ cloud_init[cloud_image] }}