From 00690ebc4c5c53a5685b591c36bb9fa1fc8ea44c Mon Sep 17 00:00:00 2001 From: Felix Matouschek Date: Thu, 15 Aug 2024 12:00:04 +0200 Subject: [PATCH] inventory_kubevirt: Run integration test in random namespace Run the integration tests for inventory_kubevirt in a random namespace and cleanup after the tests finish. Signed-off-by: Felix Matouschek --- .gitignore | 7 +++++++ .../{cleanup.yml => cleanup.yml.j2} | 6 +++--- .../targets/inventory_kubevirt/generate.yml | 19 ++++++++++++++++++ .../{playbook.yml => playbook.yml.j2} | 8 ++++---- .../targets/inventory_kubevirt/runme.sh | 20 ++++++++++++++++++- ...ubevirt.yml => test.cache.kubevirt.yml.j2} | 2 +- ...test.kubevirt.yml => test.kubevirt.yml.j2} | 2 +- ...ubevirt.yml => test.label.kubevirt.yml.j2} | 2 +- ....kubevirt.yml => test.net.kubevirt.yml.j2} | 2 +- .../{verify.yml => verify.yml.j2} | 4 ++-- 10 files changed, 58 insertions(+), 14 deletions(-) rename tests/integration/targets/inventory_kubevirt/{cleanup.yml => cleanup.yml.j2} (81%) create mode 100644 tests/integration/targets/inventory_kubevirt/generate.yml rename tests/integration/targets/inventory_kubevirt/{playbook.yml => playbook.yml.j2} (90%) rename tests/integration/targets/inventory_kubevirt/{test.cache.kubevirt.yml => test.cache.kubevirt.yml.j2} (89%) rename tests/integration/targets/inventory_kubevirt/{test.kubevirt.yml => test.kubevirt.yml.j2} (79%) rename tests/integration/targets/inventory_kubevirt/{test.label.kubevirt.yml => test.label.kubevirt.yml.j2} (82%) rename tests/integration/targets/inventory_kubevirt/{test.net.kubevirt.yml => test.net.kubevirt.yml.j2} (82%) rename tests/integration/targets/inventory_kubevirt/{verify.yml => verify.yml.j2} (87%) diff --git a/.gitignore b/.gitignore index 73ba8c2..10a7fb1 100644 --- a/.gitignore +++ b/.gitignore @@ -147,8 +147,15 @@ kubevirt.core /tests/integration/targets/inventory_kubevirt/all.yml /tests/integration/targets/inventory_kubevirt/cache_after.yml /tests/integration/targets/inventory_kubevirt/cache_before.yml +/tests/integration/targets/inventory_kubevirt/cleanup.yml /tests/integration/targets/inventory_kubevirt/empty.yml /tests/integration/targets/inventory_kubevirt/label.yml /tests/integration/targets/inventory_kubevirt/net.yml +/tests/integration/targets/inventory_kubevirt/playbook.yml +/tests/integration/targets/inventory_kubevirt/test.cache.kubevirt.yml +/tests/integration/targets/inventory_kubevirt/test.kubevirt.yml +/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/files kubevirt-cache diff --git a/tests/integration/targets/inventory_kubevirt/cleanup.yml b/tests/integration/targets/inventory_kubevirt/cleanup.yml.j2 similarity index 81% rename from tests/integration/targets/inventory_kubevirt/cleanup.yml rename to tests/integration/targets/inventory_kubevirt/cleanup.yml.j2 index af9db68..b08d59d 100644 --- a/tests/integration/targets/inventory_kubevirt/cleanup.yml +++ b/tests/integration/targets/inventory_kubevirt/cleanup.yml.j2 @@ -8,19 +8,19 @@ kubevirt.core.kubevirt_vm: state: absent name: testvm1 - namespace: default + namespace: {{ NAMESPACE }} wait: true - name: Delete another VM kubevirt.core.kubevirt_vm: state: absent name: testvm2 - namespace: default + namespace: {{ NAMESPACE }} wait: true - name: Delete the stopped VM kubevirt.core.kubevirt_vm: state: absent name: testvm-stopped - namespace: default + namespace: {{ NAMESPACE }} wait: true diff --git a/tests/integration/targets/inventory_kubevirt/generate.yml b/tests/integration/targets/inventory_kubevirt/generate.yml new file mode 100644 index 0000000..6c9eb82 --- /dev/null +++ b/tests/integration/targets/inventory_kubevirt/generate.yml @@ -0,0 +1,19 @@ +--- +- 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: + - cleanup + - playbook + - test.cache.kubevirt + - test.kubevirt + - test.label.kubevirt + - test.net.kubevirt + - verify diff --git a/tests/integration/targets/inventory_kubevirt/playbook.yml b/tests/integration/targets/inventory_kubevirt/playbook.yml.j2 similarity index 90% rename from tests/integration/targets/inventory_kubevirt/playbook.yml rename to tests/integration/targets/inventory_kubevirt/playbook.yml.j2 index 834bde9..f86cc38 100644 --- a/tests/integration/targets/inventory_kubevirt/playbook.yml +++ b/tests/integration/targets/inventory_kubevirt/playbook.yml.j2 @@ -8,7 +8,7 @@ kubevirt.core.kubevirt_vm: state: present name: testvm1 - namespace: default + namespace: {{ NAMESPACE }} labels: app: test spec: @@ -26,7 +26,7 @@ pod: {} - name: bridge-network multus: - networkName: kindexgw + networkName: {{ SECONDARY_NETWORK }} volumes: - containerDisk: image: quay.io/containerdisks/centos-stream:9 @@ -38,7 +38,7 @@ kubevirt.core.kubevirt_vm: state: present name: testvm2 - namespace: default + namespace: {{ NAMESPACE }} labels: foo: bar spec: @@ -57,7 +57,7 @@ kubevirt.core.kubevirt_vm: state: present name: testvm-stopped - namespace: default + namespace: {{ NAMESPACE }} running: false spec: domain: diff --git a/tests/integration/targets/inventory_kubevirt/runme.sh b/tests/integration/targets/inventory_kubevirt/runme.sh index 53a48fc..875a95f 100755 --- a/tests/integration/targets/inventory_kubevirt/runme.sh +++ b/tests/integration/targets/inventory_kubevirt/runme.sh @@ -1,10 +1,28 @@ #!/usr/bin/env bash set -eux -set -o pipefail export ANSIBLE_CALLBACKS_ENABLED=ansible.posix.profile_tasks export ANSIBLE_INVENTORY_ENABLED=kubevirt.core.kubevirt +NAMESPACE="test-inventory-kubevirt-$(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 all.yml cache_after.yml cache_before.yml cleanup.yml empty.yml label.yml net.yml playbook.yml \ + test.cache.kubevirt.yml test.kubevirt.yml test.label.kubevirt.yml test.net.kubevirt.yml verify.yml \ + kubevirt-cache +} +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 + +# Run the tests ansible-inventory -i test.kubevirt.yml -y --list --output empty.yml "$@" ansible-playbook playbook.yml "$@" diff --git a/tests/integration/targets/inventory_kubevirt/test.cache.kubevirt.yml b/tests/integration/targets/inventory_kubevirt/test.cache.kubevirt.yml.j2 similarity index 89% rename from tests/integration/targets/inventory_kubevirt/test.cache.kubevirt.yml rename to tests/integration/targets/inventory_kubevirt/test.cache.kubevirt.yml.j2 index 16fa113..1385016 100644 --- a/tests/integration/targets/inventory_kubevirt/test.cache.kubevirt.yml +++ b/tests/integration/targets/inventory_kubevirt/test.cache.kubevirt.yml.j2 @@ -2,7 +2,7 @@ plugin: kubevirt.core.kubevirt name: test namespaces: - - default + - {{ NAMESPACE }} create_groups: true cache: true cache_plugin: ansible.builtin.jsonfile diff --git a/tests/integration/targets/inventory_kubevirt/test.kubevirt.yml b/tests/integration/targets/inventory_kubevirt/test.kubevirt.yml.j2 similarity index 79% rename from tests/integration/targets/inventory_kubevirt/test.kubevirt.yml rename to tests/integration/targets/inventory_kubevirt/test.kubevirt.yml.j2 index 976bbb0..c1bc9ac 100644 --- a/tests/integration/targets/inventory_kubevirt/test.kubevirt.yml +++ b/tests/integration/targets/inventory_kubevirt/test.kubevirt.yml.j2 @@ -2,5 +2,5 @@ plugin: kubevirt.core.kubevirt name: test namespaces: - - default + - {{ NAMESPACE }} create_groups: true diff --git a/tests/integration/targets/inventory_kubevirt/test.label.kubevirt.yml b/tests/integration/targets/inventory_kubevirt/test.label.kubevirt.yml.j2 similarity index 82% rename from tests/integration/targets/inventory_kubevirt/test.label.kubevirt.yml rename to tests/integration/targets/inventory_kubevirt/test.label.kubevirt.yml.j2 index 6509b58..05bf77b 100644 --- a/tests/integration/targets/inventory_kubevirt/test.label.kubevirt.yml +++ b/tests/integration/targets/inventory_kubevirt/test.label.kubevirt.yml.j2 @@ -1,6 +1,6 @@ --- plugin: kubevirt.core.kubevirt namespaces: - - default + - {{ NAMESPACE }} create_groups: true label_selector: app=test diff --git a/tests/integration/targets/inventory_kubevirt/test.net.kubevirt.yml b/tests/integration/targets/inventory_kubevirt/test.net.kubevirt.yml.j2 similarity index 82% rename from tests/integration/targets/inventory_kubevirt/test.net.kubevirt.yml rename to tests/integration/targets/inventory_kubevirt/test.net.kubevirt.yml.j2 index 0e127bb..49b6376 100644 --- a/tests/integration/targets/inventory_kubevirt/test.net.kubevirt.yml +++ b/tests/integration/targets/inventory_kubevirt/test.net.kubevirt.yml.j2 @@ -1,6 +1,6 @@ --- plugin: kubevirt.core.kubevirt namespaces: - - default + - {{ NAMESPACE }} create_groups: true network_name: bridge-network diff --git a/tests/integration/targets/inventory_kubevirt/verify.yml b/tests/integration/targets/inventory_kubevirt/verify.yml.j2 similarity index 87% rename from tests/integration/targets/inventory_kubevirt/verify.yml rename to tests/integration/targets/inventory_kubevirt/verify.yml.j2 index 36145d0..8d94013 100644 --- a/tests/integration/targets/inventory_kubevirt/verify.yml +++ b/tests/integration/targets/inventory_kubevirt/verify.yml.j2 @@ -11,7 +11,7 @@ - name: Assert empty inventory ansible.builtin.assert: that: - - inv_empty['all'] is not defined or inv_empty['all']['children']['test']['children']['namespace_default']['hosts'] is not defined + - inv_empty['all'] is not defined or inv_empty['all']['children']['test']['children']['namespace_{{ NAMESPACE | replace("-", "_") }}']['hosts'] is not defined - name: Read inventory after VM creation ansible.builtin.include_vars: file: all.yml @@ -21,7 +21,7 @@ that: - inv_all['all']['children']['label_app_test']['hosts'] | length == 1 - inv_all['all']['children']['label_foo_bar']['hosts'] | length == 1 - - "'default-testvm-stopped' in inv_all['all']['children']['test']['children']['namespace_default']['hosts']" + - "'{{ NAMESPACE }}-testvm-stopped' in inv_all['all']['children']['test']['children']['namespace_{{ NAMESPACE | replace("-", "_") }}']['hosts']" - name: Read filtered inventory ansible.builtin.include_vars: file: label.yml