@@ -1143,3 +1143,95 @@ wait_for_generation() {
11431143 fi
11441144 done
11451145}
1146+
1147+ # Reads all environment variables from a pod (single kubectl exec call)
1148+ get_envs_from_pod () {
1149+ local namespace=$1
1150+ local pod=$2
1151+ local container=$3
1152+
1153+ if [ -n " $container " ]; then
1154+ kubectl exec -n " $namespace " " $pod " -c " $container " -- printenv 2> /dev/null || true
1155+ else
1156+ kubectl exec -n " $namespace " " $pod " -- printenv 2> /dev/null || true
1157+ fi
1158+ }
1159+
1160+ # Verifies a single variable in given env content
1161+ check_env_in_pod () {
1162+ local check_type=$1
1163+ local pod=$2
1164+ local var_name=$3
1165+ local expected_value=$4
1166+ local env_content=$5
1167+
1168+ local actual_value
1169+ actual_value=$( echo " $env_content " | grep -E " ^${var_name} =" | cut -d' =' -f2- || true)
1170+
1171+ if [[ " $check_type " == " add" ]]; then
1172+ if [ " $actual_value " != " $expected_value " ]; then
1173+ echo " ERROR: $var_name in $pod — expected '$expected_value ', got '${actual_value:- <missing>} '"
1174+ return 1
1175+ else
1176+ echo " OK: $var_name =$actual_value in $pod "
1177+ fi
1178+ elif [[ " $check_type " == " delete" ]]; then
1179+ if [ -n " $actual_value " ]; then
1180+ echo " ERROR: $var_name exists in $pod (should not exist)"
1181+ return 1
1182+ else
1183+ echo " OK: $var_name deleted in $pod "
1184+ fi
1185+ else
1186+ echo " ERROR: unknown check type '$check_type '"
1187+ return 1
1188+ fi
1189+ }
1190+
1191+ # Checks multiple env vars in one or more components
1192+ check_envs_for_component () {
1193+ local check_type=$1 # add | delete
1194+ local component=$2 # instance | pgbouncer | repohost
1195+ local vars=(" ${@: 3} " ) # everything after the 2nd argument
1196+
1197+ case " $component " in
1198+ instance)
1199+ POD=$( kubectl get -n " ${NAMESPACE} " pod -l postgres-operator.crunchydata.com/instance-set=instance1 -o ' jsonpath={.items[0].metadata.name}' )
1200+ CONTAINER=" "
1201+ ;;
1202+ pgbouncer)
1203+ POD=$( kubectl get -n " ${NAMESPACE} " pod -l postgres-operator.crunchydata.com/role=pgbouncer -o ' jsonpath={.items[0].metadata.name}' )
1204+ CONTAINER=" pgbouncer"
1205+ ;;
1206+ repohost)
1207+ POD=$( kubectl get -n " ${NAMESPACE} " pod -l postgres-operator.crunchydata.com/data=pgbackrest -o ' jsonpath={.items[0].metadata.name}' )
1208+ CONTAINER=" pgbackrest"
1209+ ;;
1210+ * )
1211+ echo " ERROR: unknown component '$component '"
1212+ return 1
1213+ ;;
1214+ esac
1215+
1216+ echo " Fetching environment variables for $component pod $POD ..."
1217+ local env_content
1218+ env_content=$( get_envs_from_pod " ${NAMESPACE} " " $POD " " $CONTAINER " )
1219+
1220+ local errors=0
1221+ for var_entry in " ${vars[@]} " ; do
1222+ if [[ " $check_type " == " add" ]]; then
1223+ local var_name=" ${var_entry%% =* } "
1224+ local var_expected=" ${var_entry#* =} "
1225+ check_env_in_pod add " $POD " " $var_name " " $var_expected " " $env_content " || errors=$(( errors+ 1 ))
1226+ else
1227+ check_env_in_pod delete " $POD " " $var_entry " " " " $env_content " || errors=$(( errors+ 1 ))
1228+ fi
1229+ done
1230+
1231+ if (( errors > 0 )) ; then
1232+ echo " $errors environment check(s) failed for component '$component '"
1233+ return 1
1234+ else
1235+ echo " All environment checks passed for component '$component '"
1236+ fi
1237+ }
0 commit comments