From 43a1c92a631b06f3a9f341471fe4641f9c607b06 Mon Sep 17 00:00:00 2001 From: Alejandro Gullon Date: Mon, 17 Aug 2026 22:42:49 +0200 Subject: [PATCH 1/6] Release testing for 4.21.29 pre-commit.check-secrets: ENABLED From c1719f460b1e4df1c9fe9ced2296b29feca99729 Mon Sep 17 00:00:00 2001 From: Evgeny Slutsky Date: Mon, 17 Aug 2026 18:59:02 +0200 Subject: [PATCH 2/6] fix: replace nginx-unprivileged with busybox in test assets The docker.io/nginxinc/nginx-unprivileged:latest image is a multi-arch manifest list with 14 platform variants. When mirroring with `skopeo copy --all --preserve-digests`, Quay v3.11.7 rejects one of the platform manifests as "manifest invalid", causing the mirror step to fail and aborting CI jobs (e.g. e2e-aws-tests-arm). These test pods only run `sleep 1d` and do not use any nginx functionality, so replace the image with quay.io/microshift/busybox:1.36 which is already mirrored as a single-arch image. This eliminates the problematic multi-arch manifest list from the mirror set entirely. Co-Authored-By: Claude Opus 4.6 --- docs/contributor/storage/default_csi_plugin.md | 4 ++-- test/assets/kustomizations/base/pod-base.yaml | 2 +- test/assets/reboot/pod-with-pvc.yaml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/contributor/storage/default_csi_plugin.md b/docs/contributor/storage/default_csi_plugin.md index bd2a838c9e..127e690db8 100644 --- a/docs/contributor/storage/default_csi_plugin.md +++ b/docs/contributor/storage/default_csi_plugin.md @@ -161,7 +161,7 @@ spec: - sh - -c - sleep 1d - image: nginxinc/nginx-unprivileged:latest + image: quay.io/microshift/busybox:1.36 name: test-container securityContext: allowPrivilegeEscalation: false @@ -250,7 +250,7 @@ spec: - sh - -c - sleep 1d - image: nginxinc/nginx-unprivileged:latest + image: quay.io/microshift/busybox:1.36 name: test-container securityContext: allowPrivilegeEscalation: false diff --git a/test/assets/kustomizations/base/pod-base.yaml b/test/assets/kustomizations/base/pod-base.yaml index 8e01780051..2b11644349 100644 --- a/test/assets/kustomizations/base/pod-base.yaml +++ b/test/assets/kustomizations/base/pod-base.yaml @@ -9,7 +9,7 @@ spec: type: RuntimeDefault containers: - name: test-container - image: docker.io/nginxinc/nginx-unprivileged:latest + image: quay.io/microshift/busybox:1.36 securityContext: allowPrivilegeEscalation: false capabilities: diff --git a/test/assets/reboot/pod-with-pvc.yaml b/test/assets/reboot/pod-with-pvc.yaml index 04e160c09f..c5e1ab4c9f 100644 --- a/test/assets/reboot/pod-with-pvc.yaml +++ b/test/assets/reboot/pod-with-pvc.yaml @@ -21,7 +21,7 @@ spec: type: RuntimeDefault containers: - name: test-container - image: docker.io/nginxinc/nginx-unprivileged:latest + image: quay.io/microshift/busybox:1.36 securityContext: allowPrivilegeEscalation: false capabilities: From e73aac68378f675efa4947a25fc840904354bbed Mon Sep 17 00:00:00 2001 From: Evgeny Slutsky Date: Mon, 17 Aug 2026 21:57:34 +0200 Subject: [PATCH 3/6] fix: use /bin/sh instead of /bin/bash in Oc Exec keyword The busybox image does not include /bin/bash. The Oc Exec Robot keyword hardcoded /bin/bash -c for oc exec commands, causing failures when exec'ing into busybox-based pods. Switch to /bin/sh which is available in all containers and sufficient for the POSIX commands used in tests (echo, cat, ls, grep, etc.). Co-Authored-By: Claude Opus 4.6 --- test/resources/oc.resource | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/resources/oc.resource b/test/resources/oc.resource index cba2eb13a8..24b90fb5d8 100644 --- a/test/resources/oc.resource +++ b/test/resources/oc.resource @@ -57,7 +57,7 @@ Oc Exec [Documentation] Run 'oc exec' on a specific pod in the curret test namespace ... Returns the command's combined STDOUT/STDER [Arguments] ${pod} ${cmd} ${ns}=${NAMESPACE} ${type}=pod - ${output}= Run With Kubeconfig oc exec -n ${ns} ${type}/${pod} -- /bin/bash -c '${cmd}' + ${output}= Run With Kubeconfig oc exec -n ${ns} ${type}/${pod} -- /bin/sh -c '${cmd}' RETURN ${output} Oc Wait From be39cd0058707c17cc48978460554dedd9cec6a9 Mon Sep 17 00:00:00 2001 From: Alejandro Gullon Date: Wed, 19 Aug 2026 12:22:29 +0200 Subject: [PATCH 4/6] test: increase parallel jobs for release scenarios pre-commit.check-secrets: ENABLED --- test/bin/ci_phase_boot_and_test.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/bin/ci_phase_boot_and_test.sh b/test/bin/ci_phase_boot_and_test.sh index a3b10b0dc6..41813ec334 100755 --- a/test/bin/ci_phase_boot_and_test.sh +++ b/test/bin/ci_phase_boot_and_test.sh @@ -84,9 +84,19 @@ else progress="" fi +jobs_arg="" +if [[ "${SCENARIO_SOURCES:-}" =~ .*releases.* ]]; then + # Release scenarios have grown (e.g. the router scenarios were split + # from 1 into 5) and no longer fit if every scenario's VMs stay up for + # the whole job. Shut down passed scenarios' VMs as they finish so the + # hypervisor only ever holds the still-running scenarios' VMs. + jobs_arg="-j 20" +fi + TEST_OK=true if ! parallel \ ${progress} \ + ${jobs_arg} \ --results "${SCENARIO_INFO_DIR}/{/.}/boot_and_run.log" \ --joblog "${BOOT_TEST_JOB_LOG}" \ --delay 5 \ From 11561e4dfc2ae847753558d6d593a34881d7dd2f Mon Sep 17 00:00:00 2001 From: Alejandro Gullon Date: Wed, 19 Aug 2026 13:31:02 +0200 Subject: [PATCH 5/6] test: shut down passed scenario VMs to free hypervisor resources Release scenarios use create-run-shutdown to power off VMs after tests pass, freeing vCPUs and memory for still-running scenarios. Backported from main. pre-commit.check-secrets: ENABLED --- test/bin/ci_phase_boot_and_test.sh | 7 +++++-- test/bin/scenario.sh | 33 ++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/test/bin/ci_phase_boot_and_test.sh b/test/bin/ci_phase_boot_and_test.sh index 41813ec334..9500b8a21f 100755 --- a/test/bin/ci_phase_boot_and_test.sh +++ b/test/bin/ci_phase_boot_and_test.sh @@ -85,22 +85,25 @@ else fi jobs_arg="" +scenario_action="create-and-run" if [[ "${SCENARIO_SOURCES:-}" =~ .*releases.* ]]; then # Release scenarios have grown (e.g. the router scenarios were split # from 1 into 5) and no longer fit if every scenario's VMs stay up for # the whole job. Shut down passed scenarios' VMs as they finish so the # hypervisor only ever holds the still-running scenarios' VMs. jobs_arg="-j 20" + scenario_action="create-run-shutdown" fi TEST_OK=true +# shellcheck disable=SC2086 if ! parallel \ - ${progress} \ ${jobs_arg} \ + ${progress} \ --results "${SCENARIO_INFO_DIR}/{/.}/boot_and_run.log" \ --joblog "${BOOT_TEST_JOB_LOG}" \ --delay 5 \ - bash -x ./bin/scenario.sh create-and-run ::: "${SCENARIOS_TO_RUN}"/*.sh ; then + bash -x ./bin/scenario.sh "${scenario_action}" ::: "${SCENARIOS_TO_RUN}"/*.sh ; then TEST_OK=false fi diff --git a/test/bin/scenario.sh b/test/bin/scenario.sh index 65ba2c026a..d6c8151ae8 100755 --- a/test/bin/scenario.sh +++ b/test/bin/scenario.sh @@ -1032,6 +1032,30 @@ remove_vm() { fi } +# Power off all the VMs of the scenario without undefining them or +# removing their storage. Frees the vCPUs and memory on the hypervisor +# while keeping the domains and disks available for inspection. +shutdown_scenario_vms() { + local vmdir + local vmname + local full_vmname + for vmdir in "${SCENARIO_INFO_DIR}/${SCENARIO}"/vms/*; do + if [ ! -d "${vmdir}" ]; then + continue + fi + vmname="$(basename "${vmdir}")" + full_vmname="$(full_vm_name "${vmname}")" + if sudo virsh dumpxml "${full_vmname}" >/dev/null; then + if ! sudo virsh dominfo "${full_vmname}" | grep '^State' | grep -q 'shut off'; then + sudo virsh destroy --graceful "${full_vmname}" || true + fi + if ! sudo virsh dominfo "${full_vmname}" | grep '^State' | grep -q 'shut off'; then + sudo virsh destroy "${full_vmname}" || true + fi + fi + done +} + # Configure the firewall in the VM based on the instructions in the documentation. configure_vm_firewall() { local -r vmname="$1" @@ -1641,6 +1665,15 @@ case "${action}" in action_create "$@" action_run "$@" ;; + create-run-shutdown) + action_create "$@" + action_run "$@" + rc=0 + sos_report true || rc=1 + trap "close_junit" EXIT + shutdown_scenario_vms || echo "WARNING: failed to shut down the VMs for ${SCENARIO}" + exit "${rc}" + ;; *) error "Unknown instruction ${action}" usage From fcff1259e048860f737a228cb4d267b7f865a1d1 Mon Sep 17 00:00:00 2001 From: Alejandro Gullon Date: Wed, 19 Aug 2026 13:37:26 +0200 Subject: [PATCH 6/6] test: increase greenboot timeout to 1200s for release scenarios pre-commit.check-secrets: ENABLED --- test/bin/ci_phase_boot_and_test.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/test/bin/ci_phase_boot_and_test.sh b/test/bin/ci_phase_boot_and_test.sh index 9500b8a21f..fa8a374b35 100755 --- a/test/bin/ci_phase_boot_and_test.sh +++ b/test/bin/ci_phase_boot_and_test.sh @@ -91,6 +91,7 @@ if [[ "${SCENARIO_SOURCES:-}" =~ .*releases.* ]]; then # from 1 into 5) and no longer fit if every scenario's VMs stay up for # the whole job. Shut down passed scenarios' VMs as they finish so the # hypervisor only ever holds the still-running scenarios' VMs. + export GREENBOOT_TIMEOUT=1200 jobs_arg="-j 20" scenario_action="create-run-shutdown" fi