Files
kubevirt.core/tests/integration/targets/kubevirt_vm/runme.sh
Felix Matouschek 71ea312cfc 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>
2024-08-16 08:37:36 +02:00

47 lines
1.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eux
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 "$@"
# Retry connection to VM until a login is possible
# This is necessary since wait_for is not enough to wait for logins to be possible.
# wait_for is only able to wait until sshd accepts connections.
retries=0
while ! ansible-playbook wait_for_vm.yml -i test.kubevirt.yml --private-key=files/testkey "$@"; do
if [ "$retries" -ge "10" ]; then
echo "Maximum retries reached, giving up"
exit 1
fi
echo "Failed to wait for VM, retrying..."
sleep 10
((retries+=1))
done
ansible-playbook verify.yml --diff -i test.kubevirt.yml --private-key=files/testkey "$@"