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)