From d321e42d9e7720ba9449e41d7cf50d13c1f170ac Mon Sep 17 00:00:00 2001 From: Max Gautier Date: Mon, 13 May 2024 10:20:48 +0000 Subject: [PATCH] CI: Factorize ansible-playbook flags (#11173) We have inconsistent sets of options passed to the playbooks during our CI runs. Don't run ansible-playbook directly, instead factorize the execution in a bash function using all the common flags. Also remove various ENABLE_* variables and instead directly test for the relevant conditions at execution time, as this makes it more obvious and does not force one to go back and forth in the script. --- tests/scripts/testcases_run.sh | 101 +++++++++++++++++---------------- 1 file changed, 52 insertions(+), 49 deletions(-) diff --git a/tests/scripts/testcases_run.sh b/tests/scripts/testcases_run.sh index 7cd4671a7..ec22a4dcb 100755 --- a/tests/scripts/testcases_run.sh +++ b/tests/scripts/testcases_run.sh @@ -47,21 +47,6 @@ if [[ "$CI_JOB_NAME" =~ "ubuntu" ]]; then CI_TEST_ADDITIONAL_VARS="-e ansible_python_interpreter=/usr/bin/python3" fi -ENABLE_020_TEST="true" -ENABLE_030_TEST="true" -ENABLE_040_TEST="true" -if [[ "$CI_JOB_NAME" =~ "macvlan" ]]; then - ENABLE_020_TEST="false" - ENABLE_030_TEST="false" - ENABLE_040_TEST="false" -fi - -if [[ "$CI_JOB_NAME" =~ "hardening" ]]; then - # TODO: We need to remove this condition by finding alternative container - # image instead of netchecker which doesn't work at hardening environments. - ENABLE_040_TEST="false" -fi - # Check out latest tag if testing upgrade test "${UPGRADE_TEST}" != "false" && git fetch --all && git checkout "$KUBESPRAY_VERSION" # Checkout the CI vars file so it is available @@ -69,21 +54,41 @@ test "${UPGRADE_TEST}" != "false" && git checkout "${CI_COMMIT_SHA}" tests/files test "${UPGRADE_TEST}" != "false" && git checkout "${CI_COMMIT_SHA}" ${CI_TEST_REGISTRY_MIRROR} test "${UPGRADE_TEST}" != "false" && git checkout "${CI_COMMIT_SHA}" ${CI_TEST_SETTING} + +run_playbook () { +playbook=$1 +shift +# We can set --limit here and still pass it as supplemental args because `--limit` is a 'last one wins' option +ansible-playbook --limit "all:!fake_hosts" \ + $ANSIBLE_LOG_LEVEL \ + -e @${CI_TEST_SETTING} \ + -e @${CI_TEST_REGISTRY_MIRROR} \ + -e @${CI_TEST_VARS} ${CI_TEST_ADDITIONAL_VARS} \ + -e local_release_dir=${PWD}/downloads \ + "$@" \ + ${playbook} +} + # Create cluster -ansible-playbook ${ANSIBLE_LOG_LEVEL} -e @${CI_TEST_SETTING} -e @${CI_TEST_REGISTRY_MIRROR} -e @${CI_TEST_VARS} -e local_release_dir=${PWD}/downloads --limit "all:!fake_hosts" cluster.yml +run_playbook cluster.yml # Repeat deployment if testing upgrade -if [ "${UPGRADE_TEST}" != "false" ]; then - test "${UPGRADE_TEST}" == "basic" && PLAYBOOK="cluster.yml" - test "${UPGRADE_TEST}" == "graceful" && PLAYBOOK="upgrade-cluster.yml" - git checkout "${CI_COMMIT_SHA}" - ansible-playbook ${ANSIBLE_LOG_LEVEL} -e @${CI_TEST_SETTING} -e @${CI_TEST_REGISTRY_MIRROR} -e @${CI_TEST_VARS} -e local_release_dir=${PWD}/downloads --limit "all:!fake_hosts" $PLAYBOOK -fi +case "${UPGRADE_TEST}" in + + "basic") + run_playbook cluster.yml + ;; + "graceful") + run_playbook upgrade-cluster.yml + ;; + *) + ;; +esac # Test control plane recovery if [ "${RECOVER_CONTROL_PLANE_TEST}" != "false" ]; then - ansible-playbook ${ANSIBLE_LOG_LEVEL} -e @${CI_TEST_SETTING} -e @${CI_TEST_REGISTRY_MIRROR} -e @${CI_TEST_VARS} -e local_release_dir=${PWD}/downloads --limit "${RECOVER_CONTROL_PLANE_TEST_GROUPS}:!fake_hosts" -e reset_confirmation=yes reset.yml - ansible-playbook ${ANSIBLE_LOG_LEVEL} -e @${CI_TEST_SETTING} -e @${CI_TEST_REGISTRY_MIRROR} -e @${CI_TEST_VARS} -e local_release_dir=${PWD}/downloads -e etcd_retries=10 --limit "etcd:kube_control_plane:!fake_hosts" recover-control-plane.yml + run_playbook reset.yml --limit "${RECOVER_CONTROL_PLANE_TEST_GROUPS}:!fake_hosts" -e reset_confirmation=yes + run_playbook recover-control-plane.yml -e etcd_retries=10 --limit "etcd:kube_control_plane:!fake_hosts" fi # Test collection build and install by installing our collection, emptying our repository, adding @@ -114,61 +119,59 @@ EOF # Write remove-node.yml cat > remove-node.yml <