#!/bin/bash set -euo pipefail # Available env vars: # $TMP_DIR # $CLUSTER_NAME # $KUBECONFIG # $NODE_TERMINATION_HANDLER_DOCKER_REPO # $NODE_TERMINATION_HANDLER_DOCKER_TAG # $WEBHOOK_DOCKER_REPO # $WEBHOOK_DOCKER_TAG echo "Starting Webhook URL Secret Test for Node Termination Handler" SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" WEBHOOKURL_LITERAL="webhookurl=${WEBHOOK_URL}" WEBHOOK_NAME="webhooksecret" function cleanup { kubectl delete secret -n kube-system "${WEBHOOK_NAME}" || : } kubectl create secret -n kube-system generic "${WEBHOOK_NAME}" --from-literal="${WEBHOOKURL_LITERAL}" trap "cleanup" EXIT INT TERM ERR common_helm_args=() [[ "${TEST_WINDOWS-}" == "true" ]] && common_helm_args+=(--set targetNodeOs="windows") [[ -n "${NTH_WORKER_LABEL-}" ]] && common_helm_args+=(--set nodeSelector."$NTH_WORKER_LABEL") aemm_helm_args=( upgrade --install --namespace default "$CLUSTER_NAME-aemm" "$AEMM_DL_URL" --set servicePort="$IMDS_PORT" --wait ) [[ ${#common_helm_args[@]} -gt 0 ]] && aemm_helm_args+=("${common_helm_args[@]}") set -x retry 5 helm "${aemm_helm_args[@]}" set +x emtp_helm_args=( upgrade --install --namespace default "$CLUSTER_NAME-emtp" "$SCRIPTPATH/../../config/helm/webhook-test-proxy/" --set webhookTestProxy.image.repository="$WEBHOOK_DOCKER_REPO" --set webhookTestProxy.image.tag="$WEBHOOK_DOCKER_TAG" --wait ) [[ -n "${WEBHOOK_DOCKER_PULL_POLICY-}" ]] && emtp_helm_args+=(--set webhookTestProxy.image.pullPolicy="$WEBHOOK_DOCKER_PULL_POLICY") [[ ${#common_helm_args[@]} -gt 0 ]] && emtp_helm_args+=("${common_helm_args[@]}") set -x helm "${emtp_helm_args[@]}" set +x anth_helm_args=( upgrade --install --namespace kube-system "$CLUSTER_NAME-anth" "$SCRIPTPATH/../../config/helm/aws-node-termination-handler/" --set instanceMetadataURL="http://$AEMM_URL:$IMDS_PORT" --set image.repository="$NODE_TERMINATION_HANDLER_DOCKER_REPO" --set image.tag="$NODE_TERMINATION_HANDLER_DOCKER_TAG" --set enableSpotInterruptionDraining="true" --set enableScheduledEventDraining="true" --set webhookURLSecretName=webhooksecret \ --set webhookTemplate="\{\"Content\":\"[NTH][Instance Interruption] InstanceId: \{\{ \.InstanceID \}\} - Node: \{\{ \.NodeName \}\} - InstanceType: \{\{ \.InstanceType \}\} - Kind: \{\{ \.Kind \}\} - Start Time: \{\{ \.StartTime \}\}\"\}" --force --wait ) [[ -n "${NODE_TERMINATION_HANDLER_DOCKER_PULL_POLICY-}" ]] && anth_helm_args+=(--set image.pullPolicy="$NODE_TERMINATION_HANDLER_DOCKER_PULL_POLICY") [[ ${#common_helm_args[@]} -gt 0 ]] && anth_helm_args+=("${common_helm_args[@]}") set -x helm "${anth_helm_args[@]}" set +x TAINT_CHECK_CYCLES=15 TAINT_CHECK_SLEEP=15 DEPLOYED=0 for i in $(seq 1 $TAINT_CHECK_CYCLES); do if [[ $(kubectl get deployments regular-pod-test -o jsonpath='{.status.unavailableReplicas}') -eq 0 ]]; then echo "✅ Verified regular-pod-test pod was scheduled and started!" DEPLOYED=1 break fi echo "Setup Loop $i/$TAINT_CHECK_CYCLES, sleeping for $TAINT_CHECK_SLEEP seconds" sleep $TAINT_CHECK_SLEEP done if [[ $DEPLOYED -eq 0 ]]; then exit 2 fi for i in $(seq 1 $TAINT_CHECK_CYCLES); do if kubectl get nodes "$CLUSTER_NAME-worker" | grep SchedulingDisabled; then echo "✅ Verified the worker node was cordoned!" NTH_POD_NAME=$(get_nth_worker_pod) if kubectl logs "${NTH_POD_NAME}" -n kube-system | grep 'Webhook Success'; then echo "✅ Verified the webhook message was sent!" echo "✅ Webhook URL as a Secret Test Passed $CLUSTER_NAME! ✅" exit 0 fi fi echo "Assertion Loop $i/$TAINT_CHECK_CYCLES, sleeping for $TAINT_CHECK_SLEEP seconds" sleep $TAINT_CHECK_SLEEP done exit 1