From 396d4ff68ab077fd979306286e8015713edf7bc2 Mon Sep 17 00:00:00 2001 From: Bob Fournier Date: Fri, 2 Jan 2026 11:32:17 -0500 Subject: [PATCH] Add version-specific operator validation for ISO_NO_REGISTRY mode This commit adds a new validation function to verify that expected operators are installed after cluster deployment in ISO_NO_REGISTRY mode. Key features: - Version-specific operator lists for OCP 4.20 and 4.21 - Automatic version detection using openshift_version function - Clear error reporting for missing operators - 4.20 validates 7 operators - 4.21 validates 12 operators The validation runs after the API server is available and helps ensure that the virtualization bundle and other operators were properly installed during cluster creation. --- agent/agent_post_install_validation.sh | 75 ++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/agent/agent_post_install_validation.sh b/agent/agent_post_install_validation.sh index c0b9af3ea..54a176c90 100755 --- a/agent/agent_post_install_validation.sh +++ b/agent/agent_post_install_validation.sh @@ -4,6 +4,78 @@ set -euxo pipefail SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )" source $SCRIPTDIR/common.sh +source $SCRIPTDIR/release_info.sh + +function validate_installed_operators() { + echo "Validating installed operators..." + + # Define expected operators per version + expected_operators_4_20=( + "cluster-kube-descheduler-operator" + "fence-agents-remediation" + "kubernetes-nmstate-operator" + "kubevirt-hyperconverged" + "mtv-operator" + "node-healthcheck-operator" + "node-maintenance-operator" + ) + + expected_operators_4_21=( + "cluster-kube-descheduler-operator" + "cluster-observability-operator" + "fence-agents-remediation" + "kubernetes-nmstate-operator" + "kubevirt-hyperconverged" + "local-storage-operator" + "metallb-operator" + "mtv-operator" + "node-healthcheck-operator" + "node-maintenance-operator" + "numaresources-operator" + "redhat-oadp-operator" + ) + + # Determine OCP version and select appropriate operator list + ocp_version=$(openshift_version ${OCP_DIR}) + echo "Detected OpenShift version: ${ocp_version}" + + case "${ocp_version}" in + "4.20") + expected_operators=("${expected_operators_4_20[@]}") + ;; + "4.21") + expected_operators=("${expected_operators_4_21[@]}") + ;; + *) + echo "Using 4.21 operator list as default" + expected_operators=("${expected_operators_4_21[@]}") + ;; + esac + + # Get list of installed operators (just the names, first column) + installed_operators=$(oc get operators -o custom-columns=NAME:.metadata.name --no-headers) + + missing_operators=() + for expected_op in "${expected_operators[@]}"; do + if ! echo "$installed_operators" | grep -q "^${expected_op}\."; then + missing_operators+=("$expected_op") + fi + done + + if [ ${#missing_operators[@]} -gt 0 ]; then + echo "ERROR: The following expected operators are not installed:" + for missing_op in "${missing_operators[@]}"; do + echo " - $missing_op" + done + echo "" + echo "Installed operators:" + oc get operators + exit 1 + else + echo "SUCCESS: All expected operators are installed." + oc get operators + fi +} if [[ "${AGENT_E2E_TEST_BOOT_MODE}" == "ISO_NO_REGISTRY" ]]; then MAX_ATTEMPTS=120 @@ -29,6 +101,9 @@ if [[ "${AGENT_E2E_TEST_BOOT_MODE}" == "ISO_NO_REGISTRY" ]]; then echo "SUCCESS: API server connection established and ClusterVersion is available." # Run subsequent commands after successful cluster setup oc get packagemanifests -n openshift-marketplace + + # Validate expected operators are installed + validate_installed_operators fi installed_control_plane_nodes=$(oc get nodes --selector=node-role.kubernetes.io/master | grep -v AGE | wc -l)