|
|
|
@@ -35,6 +35,17 @@ if ! kubectl auth can-i delete configmaps -n "$E2E_NAMESPACE" --quiet 2>/dev/nul
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "=== Pre-deployment cluster diagnostics ==="
|
|
|
|
|
echo "Nodes:"
|
|
|
|
|
kubectl get nodes -o wide 2>&1 || true
|
|
|
|
|
echo ""
|
|
|
|
|
echo "headlamp-dev namespace state:"
|
|
|
|
|
kubectl get ns headlamp-dev -o yaml 2>&1 || true
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Existing E2E resources in namespace:"
|
|
|
|
|
kubectl get all -n "$E2E_NAMESPACE" -l "app.kubernetes.io/instance=$E2E_RELEASE" 2>&1 || true
|
|
|
|
|
|
|
|
|
|
echo "=== E2E Headlamp Deployment ==="
|
|
|
|
|
echo " Image: ghcr.io/headlamp-k8s/headlamp:${HEADLAMP_VERSION}"
|
|
|
|
|
echo " Namespace: $E2E_NAMESPACE"
|
|
|
|
@@ -53,14 +64,62 @@ kubectl create configmap headlamp-rook-plugin \
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Removing any existing E2E deployment (clean-start)..."
|
|
|
|
|
kubectl delete clusterrolebinding headlamp-e2e-test-crb --ignore-not-found 2>/dev/null || true
|
|
|
|
|
kubectl delete deployment "${E2E_RELEASE}" -n "$E2E_NAMESPACE" --ignore-not-found --wait
|
|
|
|
|
kubectl delete service "${E2E_RELEASE}" -n "$E2E_NAMESPACE" --ignore-not-found --wait
|
|
|
|
|
kubectl delete serviceaccount "${E2E_RELEASE}" -n "$E2E_NAMESPACE" --ignore-not-found --wait
|
|
|
|
|
kubectl delete serviceaccount headlamp-e2e-test -n "$E2E_NAMESPACE" --ignore-not-found 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Creating E2E service account..."
|
|
|
|
|
kubectl create serviceaccount headlamp-e2e-test -n "$E2E_NAMESPACE"
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Creating RBAC for E2E service account..."
|
|
|
|
|
kubectl apply -f - <<EOF
|
|
|
|
|
---
|
|
|
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
|
|
|
kind: ClusterRole
|
|
|
|
|
metadata:
|
|
|
|
|
name: headlamp-e2e-test-reader
|
|
|
|
|
rules:
|
|
|
|
|
- apiGroups: [""]
|
|
|
|
|
resources: ["storageclasses"]
|
|
|
|
|
verbs: ["get", "list", "watch"]
|
|
|
|
|
- apiGroups: ["ceph.rook.io"]
|
|
|
|
|
resources: ["cephclusters"]
|
|
|
|
|
verbs: ["get", "list", "watch"]
|
|
|
|
|
- apiGroups: ["ceph.rook.io"]
|
|
|
|
|
resources: ["cephclusters/status"]
|
|
|
|
|
verbs: ["get", "list", "watch"]
|
|
|
|
|
- apiGroups: [""]
|
|
|
|
|
resources: ["persistentvolumes"]
|
|
|
|
|
verbs: ["get", "list", "watch"]
|
|
|
|
|
- apiGroups: [""]
|
|
|
|
|
resources: ["persistentvolumeclaims"]
|
|
|
|
|
verbs: ["get", "list", "watch"]
|
|
|
|
|
- apiGroups: [""]
|
|
|
|
|
resources: ["pods"]
|
|
|
|
|
verbs: ["get", "list", "watch"]
|
|
|
|
|
---
|
|
|
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
|
|
|
kind: ClusterRoleBinding
|
|
|
|
|
metadata:
|
|
|
|
|
name: headlamp-e2e-test-crb
|
|
|
|
|
subjects:
|
|
|
|
|
- kind: ServiceAccount
|
|
|
|
|
name: headlamp-e2e-test
|
|
|
|
|
namespace: ${E2E_NAMESPACE}
|
|
|
|
|
roleRef:
|
|
|
|
|
kind: ClusterRole
|
|
|
|
|
name: headlamp-e2e-test-reader
|
|
|
|
|
apiGroup: rbac.authorization.k8s.io
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Deploying Headlamp E2E instance..."
|
|
|
|
|
|
|
|
|
|
kubectl apply -f - <<EOF
|
|
|
|
|
if ! kubectl apply -f - <<EOF
|
|
|
|
|
apiVersion: v1
|
|
|
|
|
kind: ServiceAccount
|
|
|
|
|
metadata:
|
|
|
|
@@ -113,7 +172,7 @@ spec:
|
|
|
|
|
port: http
|
|
|
|
|
initialDelaySeconds: 5
|
|
|
|
|
periodSeconds: 5
|
|
|
|
|
failureThreshold: 6
|
|
|
|
|
failureThreshold: 6
|
|
|
|
|
livenessProbe:
|
|
|
|
|
httpGet:
|
|
|
|
|
path: /
|
|
|
|
@@ -148,6 +207,12 @@ spec:
|
|
|
|
|
targetPort: http
|
|
|
|
|
protocol: TCP
|
|
|
|
|
EOF
|
|
|
|
|
then
|
|
|
|
|
echo "ERROR: kubectl apply failed. Dumping cluster state..." >&2
|
|
|
|
|
kubectl get all -n "$E2E_NAMESPACE" 2>&1 || true
|
|
|
|
|
kubectl get events -n "$E2E_NAMESPACE" --sort-by='.lastTimestamp' 2>&1 | tail -30 || true
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo "Waiting for rollout..."
|
|
|
|
|
kubectl rollout status "deployment/${E2E_RELEASE}" \
|
|
|
|
@@ -172,17 +237,17 @@ echo ""
|
|
|
|
|
echo "E2E Headlamp is ready at: ${SVC_URL}"
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
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 -
|
|
|
|
|
echo "Writing E2E env file..."
|
|
|
|
|
echo "HEADLAMP_URL=${SVC_URL}" > "$REPO_ROOT/.env.e2e"
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Creating service account token for E2E auth..."
|
|
|
|
|
TOKEN=$(kubectl create token headlamp-e2e-test -n "$E2E_NAMESPACE" --duration=1h 2>/dev/null || echo "")
|
|
|
|
|
if [ -n "$TOKEN" ]; then
|
|
|
|
|
echo "HEADLAMP_URL=${SVC_URL}" > "$REPO_ROOT/.env.e2e"
|
|
|
|
|
echo "HEADLAMP_TOKEN=${TOKEN}" >> "$REPO_ROOT/.env.e2e"
|
|
|
|
|
echo "Wrote .env.e2e with HEADLAMP_URL and HEADLAMP_TOKEN"
|
|
|
|
|
else
|
|
|
|
|
echo " WARNING: Could not generate token."
|
|
|
|
|
echo "Wrote .env.e2e with HEADLAMP_URL only (token generation failed, using OIDC fallback)"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|