fix(e2e): use localhost via kubectl port-forward for HEADLAMP_URL
The browser runs outside the cluster and cannot resolve
headlamp-e2e.${E2E_NAMESPACE}.svc.cluster.local DNS names.
- Start kubectl port-forward in background after service rollout
- Poll until localhost:4466 is reachable before writing .env.e2e
- Write HEADLAMP_URL=http://localhost:4466 so Playwright browser can connect
- teardown: kill port-forward processes with pkill
Fixes PRI-752.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
committed by
Gandalf the Greybeard [agent]
parent
8b90535ec7
commit
f1dd09c155
@@ -150,18 +150,43 @@ done
|
|||||||
echo ""
|
echo ""
|
||||||
echo "E2E Headlamp is ready at: ${SVC_URL}"
|
echo "E2E Headlamp is ready at: ${SVC_URL}"
|
||||||
|
|
||||||
|
PF_PORT=4466
|
||||||
|
echo ""
|
||||||
|
echo "Starting kubectl port-forward to ${SVC_URL} on localhost:${PF_PORT}..."
|
||||||
|
nohup kubectl port-forward -n "$E2E_NAMESPACE" "svc/${E2E_RELEASE}" "${PF_PORT}:80" > "$REPO_ROOT/.port-forward.log" 2>&1 &
|
||||||
|
PF_PID=$!
|
||||||
|
echo " port-forward PID: ${PF_PID}"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Waiting for localhost:${PF_PORT} to be reachable via port-forward..."
|
||||||
|
ATTEMPTS=0
|
||||||
|
MAX_ATTEMPTS=24
|
||||||
|
until curl -sf --max-time 5 "http://localhost:${PF_PORT}" -o /dev/null 2>/dev/null; do
|
||||||
|
ATTEMPTS=$((ATTEMPTS + 1))
|
||||||
|
if [ "$ATTEMPTS" -ge "$MAX_ATTEMPTS" ]; then
|
||||||
|
echo "ERROR: localhost:${PF_PORT} not reachable after $((MAX_ATTEMPTS * 5))s" >&2
|
||||||
|
cat "$REPO_ROOT/.port-forward.log" >&2
|
||||||
|
kill "${PF_PID}" 2>/dev/null || true
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo " [${ATTEMPTS}/${MAX_ATTEMPTS}] port-forward not yet reachable, retrying in 5s..."
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
echo "Port-forward is ready at http://localhost:${PF_PORT}"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "Creating service account token for E2E auth..."
|
echo "Creating service account token for E2E auth..."
|
||||||
kubectl create serviceaccount headlamp-e2e-test -n "$E2E_NAMESPACE" --dry-run=client -o yaml | kubectl apply -f -
|
kubectl create serviceaccount headlamp-e2e-test -n "$E2E_NAMESPACE" --dry-run=client -o yaml | kubectl apply -f -
|
||||||
|
|
||||||
TOKEN=$(kubectl create token headlamp-e2e-test -n "$E2E_NAMESPACE" --duration=1h 2>/dev/null || echo "")
|
TOKEN=$(kubectl create token headlamp-e2e-test -n "$E2E_NAMESPACE" --duration=1h 2>/dev/null || echo "")
|
||||||
if [ -n "$TOKEN" ]; then
|
if [ -n "$TOKEN" ]; then
|
||||||
echo "HEADLAMP_URL=${SVC_URL}" > "$REPO_ROOT/.env.e2e"
|
echo "HEADLAMP_URL=http://localhost:${PF_PORT}" > "$REPO_ROOT/.env.e2e"
|
||||||
echo "HEADLAMP_TOKEN=${TOKEN}" >> "$REPO_ROOT/.env.e2e"
|
echo "HEADLAMP_TOKEN=${TOKEN}" >> "$REPO_ROOT/.env.e2e"
|
||||||
echo "Wrote .env.e2e with HEADLAMP_URL and HEADLAMP_TOKEN"
|
echo "Wrote .env.e2e with HEADLAMP_URL=http://localhost:${PF_PORT} and HEADLAMP_TOKEN"
|
||||||
else
|
else
|
||||||
echo " WARNING: Could not generate token."
|
echo " WARNING: Could not generate token."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "E2E deployment complete."
|
echo "E2E deployment complete. port-forward PID ${PF_PID} is running in background."
|
||||||
|
|||||||
@@ -26,5 +26,10 @@ if [ -f "$REPO_ROOT/.env.e2e" ]; then
|
|||||||
echo "Removed .env.e2e"
|
echo "Removed .env.e2e"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Killing any kubectl port-forward processes for ${E2E_RELEASE}..."
|
||||||
|
pkill -f "kubectl port-forward.*${E2E_RELEASE}" 2>/dev/null || true
|
||||||
|
|
||||||
|
rm -f "$REPO_ROOT/.port-forward.log"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "E2E teardown complete."
|
echo "E2E teardown complete."
|
||||||
|
|||||||
Reference in New Issue
Block a user