From 71ea312cfc17848ecb320c2d59efb9aee19b7c40 Mon Sep 17 00:00:00 2001 From: Felix Matouschek Date: Thu, 15 Aug 2024 13:31:48 +0200 Subject: [PATCH] kubevirt_vm: Run integration test in random namespace Run the integration tests for kubevirt_vm in a random namespace and cleanup after the tests finish. Signed-off-by: Felix Matouschek --- .gitignore | 4 ++++ .../targets/kubevirt_vm/generate.yml | 16 ++++++++++++++++ .../{playbook.yml => playbook.yml.j2} | 6 +++--- tests/integration/targets/kubevirt_vm/runme.sh | 18 +++++++++++++++++- ...{test.kubevirt.yml => test.kubevirt.yml.j2} | 2 +- .../kubevirt_vm/{verify.yml => verify.yml.j2} | 6 +++--- .../{wait_for_vm.yml => wait_for_vm.yml.j2} | 4 ++-- 7 files changed, 46 insertions(+), 10 deletions(-) create mode 100644 tests/integration/targets/kubevirt_vm/generate.yml rename tests/integration/targets/kubevirt_vm/{playbook.yml => playbook.yml.j2} (86%) rename tests/integration/targets/kubevirt_vm/{test.kubevirt.yml => test.kubevirt.yml.j2} (79%) rename tests/integration/targets/kubevirt_vm/{verify.yml => verify.yml.j2} (91%) rename tests/integration/targets/kubevirt_vm/{wait_for_vm.yml => wait_for_vm.yml.j2} (80%) diff --git a/.gitignore b/.gitignore index 10a7fb1..74fc211 100644 --- a/.gitignore +++ b/.gitignore @@ -157,5 +157,9 @@ kubevirt.core /tests/integration/targets/inventory_kubevirt/test.label.kubevirt.yml /tests/integration/targets/inventory_kubevirt/test.net.kubevirt.yml /tests/integration/targets/inventory_kubevirt/verify.yml +/tests/integration/targets/kubevirt_vm/playbook.yml +/tests/integration/targets/kubevirt_vm/test.kubevirt.yml +/tests/integration/targets/kubevirt_vm/verify.yml +/tests/integration/targets/kubevirt_vm/wait_for_vm.yml /tests/integration/targets/kubevirt_vm/files kubevirt-cache diff --git a/tests/integration/targets/kubevirt_vm/generate.yml b/tests/integration/targets/kubevirt_vm/generate.yml new file mode 100644 index 0000000..38c5a36 --- /dev/null +++ b/tests/integration/targets/kubevirt_vm/generate.yml @@ -0,0 +1,16 @@ +--- +- name: Generate test files + connection: local + gather_facts: false + hosts: localhost + tasks: + - name: Generate test files + ansible.builtin.template: + src: "{{ item }}.yml.j2" + dest: "{{ item }}.yml" + mode: "0644" + with_items: + - playbook + - test.kubevirt + - verify + - wait_for_vm diff --git a/tests/integration/targets/kubevirt_vm/playbook.yml b/tests/integration/targets/kubevirt_vm/playbook.yml.j2 similarity index 86% rename from tests/integration/targets/kubevirt_vm/playbook.yml rename to tests/integration/targets/kubevirt_vm/playbook.yml.j2 index 2966c56..6bb821e 100644 --- a/tests/integration/targets/kubevirt_vm/playbook.yml +++ b/tests/integration/targets/kubevirt_vm/playbook.yml.j2 @@ -7,7 +7,7 @@ - name: Create a VM kubevirt.core.kubevirt_vm: name: testvm - namespace: default + namespace: {{ NAMESPACE }} labels: app: test instancetype: @@ -27,7 +27,7 @@ pod: {} - name: bridge-network multus: - networkName: kindexgw + networkName: {{ SECONDARY_NETWORK }} volumes: - containerDisk: image: quay.io/containerdisks/centos-stream:9 @@ -36,7 +36,7 @@ userData: |- #cloud-config ssh_authorized_keys: - - {{ lookup('file', 'testkey.pub') }} + - {{ '{{' }} lookup('file', 'testkey.pub') {{ '}}' }} name: cloudinitdisk wait: true wait_timeout: 600 diff --git a/tests/integration/targets/kubevirt_vm/runme.sh b/tests/integration/targets/kubevirt_vm/runme.sh index 10097f0..4bf1682 100755 --- a/tests/integration/targets/kubevirt_vm/runme.sh +++ b/tests/integration/targets/kubevirt_vm/runme.sh @@ -1,14 +1,30 @@ #!/usr/bin/env bash set -eux -set -o pipefail export ANSIBLE_CALLBACKS_ENABLED=ansible.posix.profile_tasks export ANSIBLE_INVENTORY_ENABLED=kubevirt.core.kubevirt export ANSIBLE_HOST_KEY_CHECKING=False +NAMESPACE="test-kubevirt-vm-$(tr -dc '[:lower:]' < /dev/urandom | head -c 5)" +SECONDARY_NETWORK=${SECONDARY_NETWORK:-default/kindexgw} + +cleanup() { + ansible localhost -m kubernetes.core.k8s -a "name=${NAMESPACE} api_version=v1 kind=Namespace state=absent" + rm -rf playbook.yml test.kubevirt.yml verify.yml wait_for_vm.yml files +} +trap cleanup EXIT + +# Prepare the test environment +ansible localhost -m kubernetes.core.k8s -a "name=${NAMESPACE} api_version=v1 kind=Namespace state=present" +ansible-playbook \ + -e "NAMESPACE=${NAMESPACE}" \ + -e "SECONDARY_NETWORK=${SECONDARY_NETWORK}" \ + generate.yml + [ -d files ] || mkdir files [ -f files/testkey ] || (ssh-keygen -t rsa -C test@test -f files/testkey -N "") +# Run the tests ansible-playbook playbook.yml "$@" ansible-inventory -i test.kubevirt.yml -y --list "$@" diff --git a/tests/integration/targets/kubevirt_vm/test.kubevirt.yml b/tests/integration/targets/kubevirt_vm/test.kubevirt.yml.j2 similarity index 79% rename from tests/integration/targets/kubevirt_vm/test.kubevirt.yml rename to tests/integration/targets/kubevirt_vm/test.kubevirt.yml.j2 index a3bc026..c7fbf46 100644 --- a/tests/integration/targets/kubevirt_vm/test.kubevirt.yml +++ b/tests/integration/targets/kubevirt_vm/test.kubevirt.yml.j2 @@ -1,5 +1,5 @@ --- plugin: kubevirt.core.kubevirt namespaces: - - default + - {{ NAMESPACE }} network_name: bridge-network diff --git a/tests/integration/targets/kubevirt_vm/verify.yml b/tests/integration/targets/kubevirt_vm/verify.yml.j2 similarity index 91% rename from tests/integration/targets/kubevirt_vm/verify.yml rename to tests/integration/targets/kubevirt_vm/verify.yml.j2 index 02ffbe5..1f631c1 100644 --- a/tests/integration/targets/kubevirt_vm/verify.yml +++ b/tests/integration/targets/kubevirt_vm/verify.yml.j2 @@ -7,7 +7,7 @@ - name: Create a VM kubevirt.core.kubevirt_vm: name: testvm - namespace: default + namespace: {{ NAMESPACE }} labels: app: test register: recreate @@ -29,7 +29,7 @@ - name: Delete a VM kubevirt.core.kubevirt_vm: name: testvm - namespace: default + namespace: {{ NAMESPACE }} state: absent wait: true @@ -41,7 +41,7 @@ - name: Delete a VM kubevirt.core.kubevirt_vm: name: testvm - namespace: default + namespace: {{ NAMESPACE }} state: absent register: delete - name: Assert module reported no changes diff --git a/tests/integration/targets/kubevirt_vm/wait_for_vm.yml b/tests/integration/targets/kubevirt_vm/wait_for_vm.yml.j2 similarity index 80% rename from tests/integration/targets/kubevirt_vm/wait_for_vm.yml rename to tests/integration/targets/kubevirt_vm/wait_for_vm.yml.j2 index 840d0b2..f8d835f 100644 --- a/tests/integration/targets/kubevirt_vm/wait_for_vm.yml +++ b/tests/integration/targets/kubevirt_vm/wait_for_vm.yml.j2 @@ -7,14 +7,14 @@ - name: Wait up to 900 seconds for port 22 to become open ansible.builtin.wait_for: port: 22 - host: "{{ hostvars['default-testvm'].ansible_host }}" + host: "{{ '{{' }} hostvars['{{ NAMESPACE }}-testvm'].ansible_host {{ '}}' }}" search_regex: OpenSSH delay: 10 timeout: 900 - name: Connect to VM gather_facts: true - hosts: default-testvm + hosts: {{ NAMESPACE }}-testvm remote_user: cloud-user vars: ansible_python_interpreter: /usr/bin/python3