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 <fmatouschek@redhat.com>
This commit is contained in:
Felix Matouschek
2024-08-15 13:31:48 +02:00
parent 00690ebc4c
commit 71ea312cfc
7 changed files with 46 additions and 10 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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