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 <fmatouschek@redhat.com>
This commit is contained in:
Felix Matouschek
2024-08-15 12:00:04 +02:00
parent aa75843f16
commit 00690ebc4c
10 changed files with 58 additions and 14 deletions

7
.gitignore vendored
View File

@@ -147,8 +147,15 @@ kubevirt.core
/tests/integration/targets/inventory_kubevirt/all.yml /tests/integration/targets/inventory_kubevirt/all.yml
/tests/integration/targets/inventory_kubevirt/cache_after.yml /tests/integration/targets/inventory_kubevirt/cache_after.yml
/tests/integration/targets/inventory_kubevirt/cache_before.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/empty.yml
/tests/integration/targets/inventory_kubevirt/label.yml /tests/integration/targets/inventory_kubevirt/label.yml
/tests/integration/targets/inventory_kubevirt/net.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 /tests/integration/targets/kubevirt_vm/files
kubevirt-cache kubevirt-cache

View File

@@ -8,19 +8,19 @@
kubevirt.core.kubevirt_vm: kubevirt.core.kubevirt_vm:
state: absent state: absent
name: testvm1 name: testvm1
namespace: default namespace: {{ NAMESPACE }}
wait: true wait: true
- name: Delete another VM - name: Delete another VM
kubevirt.core.kubevirt_vm: kubevirt.core.kubevirt_vm:
state: absent state: absent
name: testvm2 name: testvm2
namespace: default namespace: {{ NAMESPACE }}
wait: true wait: true
- name: Delete the stopped VM - name: Delete the stopped VM
kubevirt.core.kubevirt_vm: kubevirt.core.kubevirt_vm:
state: absent state: absent
name: testvm-stopped name: testvm-stopped
namespace: default namespace: {{ NAMESPACE }}
wait: true wait: true

View File

@@ -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

View File

@@ -8,7 +8,7 @@
kubevirt.core.kubevirt_vm: kubevirt.core.kubevirt_vm:
state: present state: present
name: testvm1 name: testvm1
namespace: default namespace: {{ NAMESPACE }}
labels: labels:
app: test app: test
spec: spec:
@@ -26,7 +26,7 @@
pod: {} pod: {}
- name: bridge-network - name: bridge-network
multus: multus:
networkName: kindexgw networkName: {{ SECONDARY_NETWORK }}
volumes: volumes:
- containerDisk: - containerDisk:
image: quay.io/containerdisks/centos-stream:9 image: quay.io/containerdisks/centos-stream:9
@@ -38,7 +38,7 @@
kubevirt.core.kubevirt_vm: kubevirt.core.kubevirt_vm:
state: present state: present
name: testvm2 name: testvm2
namespace: default namespace: {{ NAMESPACE }}
labels: labels:
foo: bar foo: bar
spec: spec:
@@ -57,7 +57,7 @@
kubevirt.core.kubevirt_vm: kubevirt.core.kubevirt_vm:
state: present state: present
name: testvm-stopped name: testvm-stopped
namespace: default namespace: {{ NAMESPACE }}
running: false running: false
spec: spec:
domain: domain:

View File

@@ -1,10 +1,28 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eux set -eux
set -o pipefail
export ANSIBLE_CALLBACKS_ENABLED=ansible.posix.profile_tasks export ANSIBLE_CALLBACKS_ENABLED=ansible.posix.profile_tasks
export ANSIBLE_INVENTORY_ENABLED=kubevirt.core.kubevirt 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-inventory -i test.kubevirt.yml -y --list --output empty.yml "$@"
ansible-playbook playbook.yml "$@" ansible-playbook playbook.yml "$@"

View File

@@ -2,7 +2,7 @@
plugin: kubevirt.core.kubevirt plugin: kubevirt.core.kubevirt
name: test name: test
namespaces: namespaces:
- default - {{ NAMESPACE }}
create_groups: true create_groups: true
cache: true cache: true
cache_plugin: ansible.builtin.jsonfile cache_plugin: ansible.builtin.jsonfile

View File

@@ -2,5 +2,5 @@
plugin: kubevirt.core.kubevirt plugin: kubevirt.core.kubevirt
name: test name: test
namespaces: namespaces:
- default - {{ NAMESPACE }}
create_groups: true create_groups: true

View File

@@ -1,6 +1,6 @@
--- ---
plugin: kubevirt.core.kubevirt plugin: kubevirt.core.kubevirt
namespaces: namespaces:
- default - {{ NAMESPACE }}
create_groups: true create_groups: true
label_selector: app=test label_selector: app=test

View File

@@ -1,6 +1,6 @@
--- ---
plugin: kubevirt.core.kubevirt plugin: kubevirt.core.kubevirt
namespaces: namespaces:
- default - {{ NAMESPACE }}
create_groups: true create_groups: true
network_name: bridge-network network_name: bridge-network

View File

@@ -11,7 +11,7 @@
- name: Assert empty inventory - name: Assert empty inventory
ansible.builtin.assert: ansible.builtin.assert:
that: 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 - name: Read inventory after VM creation
ansible.builtin.include_vars: ansible.builtin.include_vars:
file: all.yml file: all.yml
@@ -21,7 +21,7 @@
that: that:
- inv_all['all']['children']['label_app_test']['hosts'] | length == 1 - inv_all['all']['children']['label_app_test']['hosts'] | length == 1
- inv_all['all']['children']['label_foo_bar']['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 - name: Read filtered inventory
ansible.builtin.include_vars: ansible.builtin.include_vars:
file: label.yml file: label.yml