From fb1d42c95a9a5383e843a9242b58f27e9d9eb420 Mon Sep 17 00:00:00 2001 From: Karthikeyan Balasubramaniam Date: Thu, 19 Mar 2026 11:21:33 +0800 Subject: [PATCH] fix: update verify.sh scripts to handle kubectl output and correct pod names --- exercises/01-pod-basics/verify.sh | 2 +- exercises/02-multi-container-pod/verify.sh | 8 ++++---- exercises/03-configmap-secret/verify.sh | 19 ++++++++++--------- exercises/04-rbac/verify.sh | 16 ++++++++-------- exercises/05-networkpolicy/verify.sh | 6 +++--- exercises/06-rolling-update/verify.sh | 6 +++--- exercises/07-helm/verify.sh | 8 ++++---- exercises/08-probes/verify.sh | 4 ++-- exercises/09-ingress-gateway/verify.sh | 6 +++--- exercises/10-security-pvc/verify.sh | 4 ++-- exercises/11-statefulset/verify.sh | 10 +++++----- exercises/12-daemonset/verify.sh | 6 +++--- exercises/13-init-containers/verify.sh | 6 +++--- exercises/14-in-place-scaling/verify.sh | 2 +- 14 files changed, 52 insertions(+), 51 deletions(-) diff --git a/exercises/01-pod-basics/verify.sh b/exercises/01-pod-basics/verify.sh index e838c3f..9f0440d 100644 --- a/exercises/01-pod-basics/verify.sh +++ b/exercises/01-pod-basics/verify.sh @@ -25,7 +25,7 @@ echo "Verifying Exercise 01 — Pod Basics" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" # Check namespace exists -ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Namespace '$NAMESPACE' exists" "$ns_exists" # Check pod exists and is running diff --git a/exercises/02-multi-container-pod/verify.sh b/exercises/02-multi-container-pod/verify.sh index 10536eb..7118548 100644 --- a/exercises/02-multi-container-pod/verify.sh +++ b/exercises/02-multi-container-pod/verify.sh @@ -24,23 +24,23 @@ check() { echo "Verifying Exercise 02 — Multi-Container Pod (Sidecar)" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Namespace '$NAMESPACE' exists" "$ns_exists" pod_phase=$(kubectl get pod "$POD_NAME" -n "$NAMESPACE" -o jsonpath='{.status.phase}' 2>/dev/null || echo "") check "Pod '$POD_NAME' is Running" "$([ "$pod_phase" = "Running" ] && echo true || echo false)" # Check container count -container_count=$(kubectl get pod "$POD_NAME" -n "$NAMESPACE" -o jsonpath='{.spec.containers[*].name}' 2>/dev/null | wc -w || echo 0) +container_count=$(kubectl get pod "$POD_NAME" -n "$NAMESPACE" -o jsonpath='{.spec.containers[*].name} {.spec.initContainers[*].name}' 2>/dev/null | wc -w | tr -d ' ' || true) check "Pod has 2 containers" "$([ "$container_count" -eq 2 ] && echo true || echo false)" # Check container names -containers=$(kubectl get pod "$POD_NAME" -n "$NAMESPACE" -o jsonpath='{.spec.containers[*].name}' 2>/dev/null || echo "") +containers=$(kubectl get pod "$POD_NAME" -n "$NAMESPACE" -o jsonpath='{.spec.containers[*].name} {.spec.initContainers[*].name}' 2>/dev/null || echo "") check "Container 'app' exists" "$(echo "$containers" | grep -q 'app' && echo true || echo false)" check "Container 'log-agent' exists" "$(echo "$containers" | grep -q 'log-agent' && echo true || echo false)" # Check shared volume -vol_count=$(kubectl get pod "$POD_NAME" -n "$NAMESPACE" -o jsonpath='{.spec.volumes[*].name}' 2>/dev/null | wc -w || echo 0) +vol_count=$(kubectl get pod "$POD_NAME" -n "$NAMESPACE" -o jsonpath='{.spec.volumes[*].name}' 2>/dev/null | wc -w | tr -d ' ' || true) check "Shared volume exists" "$([ "$vol_count" -ge 1 ] && echo true || echo false)" # Check sidecar is producing logs diff --git a/exercises/03-configmap-secret/verify.sh b/exercises/03-configmap-secret/verify.sh index 767ab0a..2694655 100644 --- a/exercises/03-configmap-secret/verify.sh +++ b/exercises/03-configmap-secret/verify.sh @@ -23,28 +23,29 @@ check() { echo "Verifying Exercise 03 — ConfigMap + Secret Injection" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Namespace '$NAMESPACE' exists" "$ns_exists" # Check ConfigMap -cm_exists=$(kubectl get configmap app-config -n "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +cm_exists=$(kubectl get configmap app-config -n "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "ConfigMap 'app-config' exists" "$cm_exists" # Check Secret -sec_exists=$(kubectl get secret app-secret -n "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) -check "Secret 'app-secret' exists" "$sec_exists" +sec_exists=$(kubectl get secret db-creds -n "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) +check "Secret 'db-creds' exists" "$sec_exists" # Check pod -pod_phase=$(kubectl get pod config-pod -n "$NAMESPACE" -o jsonpath='{.status.phase}' 2>/dev/null || echo "") -check "Pod 'config-pod' is Running" "$([ "$pod_phase" = "Running" ] && echo true || echo false)" +pod_phase=$(kubectl get pod config-app -n "$NAMESPACE" -o jsonpath='{.status.phase}' 2>/dev/null || echo "") +check "Pod 'config-app' is Running" "$([ "$pod_phase" = "Running" ] && echo true || echo false)" # Check env vars from ConfigMap -env_val=$(kubectl exec config-pod -n "$NAMESPACE" -- env 2>/dev/null | grep -c "APP_ENV\|LOG_LEVEL" || echo 0) +env_val=$(kubectl exec config-app -n "$NAMESPACE" -- env 2>/dev/null | grep -E "DB_HOST|LOG_LEVEL" | wc -l | tr -d ' ' || true) check "ConfigMap env vars injected" "$([ "$env_val" -ge 1 ] && echo true || echo false)" + # Check secret volume mount -secret_mount=$(kubectl get pod config-pod -n "$NAMESPACE" -o jsonpath='{.spec.containers[0].volumeMounts[*].mountPath}' 2>/dev/null || echo "") -check "Secret mounted as volume" "$(echo "$secret_mount" | grep -q '/etc/secret' && echo true || echo false)" +secret_mount=$(kubectl get pod config-app -n "$NAMESPACE" -o jsonpath='{.spec.containers[0].volumeMounts[*].mountPath}' 2>/dev/null || echo "") +check "Secret mounted as volume" "$(echo "$secret_mount" | grep -q '/etc/db-creds' && echo true || echo false)" echo "" echo "Result: $PASS passed, $FAIL failed out of $((PASS + FAIL)) checks" diff --git a/exercises/04-rbac/verify.sh b/exercises/04-rbac/verify.sh index 9597cce..594b0a7 100644 --- a/exercises/04-rbac/verify.sh +++ b/exercises/04-rbac/verify.sh @@ -23,26 +23,26 @@ check() { echo "Verifying Exercise 04 — RBAC" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Namespace '$NAMESPACE' exists" "$ns_exists" # Check ServiceAccount -sa_exists=$(kubectl get serviceaccount app-sa -n "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +sa_exists=$(kubectl get serviceaccount app-sa -n "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "ServiceAccount 'app-sa' exists" "$sa_exists" # Check Role -role_exists=$(kubectl get role pod-reader -n "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) -check "Role 'pod-reader' exists" "$role_exists" +role_exists=$(kubectl get role pod-manager -n "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) +check "Role 'pod-manager' exists" "$role_exists" # Check RoleBinding -rb_exists=$(kubectl get rolebinding read-pods -n "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) -check "RoleBinding 'read-pods' exists" "$rb_exists" +rb_exists=$(kubectl get rolebinding app-sa-binding -n "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) +check "RoleBinding 'app-sa-binding' exists" "$rb_exists" # Check permissions -can_get=$(kubectl auth can-i get pods --as=system:serviceaccount:"$NAMESPACE":app-sa -n "$NAMESPACE" 2>/dev/null || echo "no") +can_get=$(kubectl auth can-i get pods --as=system:serviceaccount:"$NAMESPACE":app-sa -n "$NAMESPACE" 2>/dev/null || true) check "app-sa can get pods" "$([ "$can_get" = "yes" ] && echo true || echo false)" -can_delete=$(kubectl auth can-i delete pods --as=system:serviceaccount:"$NAMESPACE":app-sa -n "$NAMESPACE" 2>/dev/null || echo "yes") +can_delete=$(kubectl auth can-i delete pods --as=system:serviceaccount:"$NAMESPACE":app-sa -n "$NAMESPACE" 2>/dev/null || true) check "app-sa cannot delete pods" "$([ "$can_delete" = "no" ] && echo true || echo false)" echo "" diff --git a/exercises/05-networkpolicy/verify.sh b/exercises/05-networkpolicy/verify.sh index da97a99..847e495 100644 --- a/exercises/05-networkpolicy/verify.sh +++ b/exercises/05-networkpolicy/verify.sh @@ -23,11 +23,11 @@ check() { echo "Verifying Exercise 05 — NetworkPolicy" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Namespace '$NAMESPACE' exists" "$ns_exists" # Check NetworkPolicy exists -np_exists=$(kubectl get networkpolicy -n "$NAMESPACE" --no-headers 2>/dev/null | wc -l || echo 0) +np_exists=$(kubectl get networkpolicy -n "$NAMESPACE" --no-headers 2>/dev/null | wc -l | tr -d ' ' || true) check "NetworkPolicy exists" "$([ "$np_exists" -ge 1 ] && echo true || echo false)" # Check policy types include Ingress @@ -38,7 +38,7 @@ check "Policy includes Ingress type" "$(echo "$policy_types" | grep -q 'Ingress' check "Policy includes Egress type" "$(echo "$policy_types" | grep -q 'Egress' && echo true || echo false)" # Check DNS egress rule (UDP 53) -egress_port=$(kubectl get networkpolicy -n "$NAMESPACE" -o json 2>/dev/null | grep -c '"port": 53' || echo 0) +egress_port=$(kubectl get networkpolicy -n "$NAMESPACE" -o json 2>/dev/null | grep -c '"port": 53' | tr -d ' ' || true) check "DNS egress rule (port 53) present" "$([ "$egress_port" -ge 1 ] && echo true || echo false)" echo "" diff --git a/exercises/06-rolling-update/verify.sh b/exercises/06-rolling-update/verify.sh index bfd0492..165f5f8 100644 --- a/exercises/06-rolling-update/verify.sh +++ b/exercises/06-rolling-update/verify.sh @@ -23,11 +23,11 @@ check() { echo "Verifying Exercise 06 — Deployment + Rolling Update + Rollback" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Namespace '$NAMESPACE' exists" "$ns_exists" # Check deployment exists -deploy_exists=$(kubectl get deployment webapp -n "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +deploy_exists=$(kubectl get deployment webapp -n "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Deployment 'webapp' exists" "$deploy_exists" # Check replicas @@ -47,7 +47,7 @@ max_unavail=$(kubectl get deployment webapp -n "$NAMESPACE" -o jsonpath='{.spec. check "maxUnavailable is 0" "$([ "$max_unavail" = "0" ] && echo true || echo false)" # Check rollout history has multiple revisions -rev_count=$(kubectl rollout history deployment/webapp -n "$NAMESPACE" 2>/dev/null | grep -c "^[0-9]" || echo 0) +rev_count=$(kubectl rollout history deployment/webapp -n "$NAMESPACE" 2>/dev/null | grep -c "^[0-9]" | tr -d ' ' || true) check "Rollout history has revisions" "$([ "$rev_count" -ge 1 ] && echo true || echo false)" echo "" diff --git a/exercises/07-helm/verify.sh b/exercises/07-helm/verify.sh index 6d7df3a..046d71f 100644 --- a/exercises/07-helm/verify.sh +++ b/exercises/07-helm/verify.sh @@ -28,15 +28,15 @@ helm_exists=$(command -v helm &>/dev/null && echo true || echo false) check "Helm CLI is installed" "$helm_exists" # Check bitnami repo -repo_exists=$(helm repo list 2>/dev/null | grep -c bitnami || echo 0) +repo_exists=$(helm repo list 2>/dev/null | grep -c bitnami | tr -d ' ' || true) check "Bitnami repo added" "$([ "$repo_exists" -ge 1 ] && echo true || echo false)" # Check release exists -release_exists=$(helm list -n "$NAMESPACE" 2>/dev/null | grep -c "my-nginx" || echo 0) -check "Release 'my-nginx' exists" "$([ "$release_exists" -ge 1 ] && echo true || echo false)" +release_exists=$(helm list -n "$NAMESPACE" 2>/dev/null | grep -c "myredis" | tr -d ' ' || true) +check "Release 'myredis' exists" "$([ "$release_exists" -ge 1 ] && echo true || echo false)" # Check release status -release_status=$(helm status my-nginx -n "$NAMESPACE" 2>/dev/null | grep -c "deployed" || echo 0) +release_status=$(helm status myredis -n "$NAMESPACE" 2>/dev/null | grep -c "deployed" | tr -d ' ' || true) check "Release is deployed" "$([ "$release_status" -ge 1 ] && echo true || echo false)" echo "" diff --git a/exercises/08-probes/verify.sh b/exercises/08-probes/verify.sh index d30eb49..59b97e7 100644 --- a/exercises/08-probes/verify.sh +++ b/exercises/08-probes/verify.sh @@ -23,10 +23,10 @@ check() { echo "Verifying Exercise 08 — Probes" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Namespace '$NAMESPACE' exists" "$ns_exists" -POD_NAME="probe-pod" +POD_NAME="probe-test" pod_phase=$(kubectl get pod "$POD_NAME" -n "$NAMESPACE" -o jsonpath='{.status.phase}' 2>/dev/null || echo "") check "Pod '$POD_NAME' is Running" "$([ "$pod_phase" = "Running" ] && echo true || echo false)" diff --git a/exercises/09-ingress-gateway/verify.sh b/exercises/09-ingress-gateway/verify.sh index 47aba1a..9af4a45 100644 --- a/exercises/09-ingress-gateway/verify.sh +++ b/exercises/09-ingress-gateway/verify.sh @@ -23,11 +23,11 @@ check() { echo "Verifying Exercise 09 — Ingress + Gateway API" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Namespace '$NAMESPACE' exists" "$ns_exists" # Task A — Ingress -ingress_exists=$(kubectl get ingress -n "$NAMESPACE" --no-headers 2>/dev/null | wc -l || echo 0) +ingress_exists=$(kubectl get ingress -n "$NAMESPACE" --no-headers 2>/dev/null | wc -l | tr -d ' ' || true) check "Ingress resource exists" "$([ "$ingress_exists" -ge 1 ] && echo true || echo false)" # Check Ingress has host-based routing @@ -35,7 +35,7 @@ ingress_host=$(kubectl get ingress -n "$NAMESPACE" -o jsonpath='{.items[0].spec. check "Ingress has host rule" "$([ -n "$ingress_host" ] && echo true || echo false)" # Task B — Gateway API (may not be available in all clusters) -httproute_exists=$(kubectl get httproute -n "$NAMESPACE" --no-headers 2>/dev/null | wc -l || echo 0) +httproute_exists=$(kubectl get httproute -n "$NAMESPACE" --no-headers 2>/dev/null | wc -l | tr -d ' ' || true) if [ "$httproute_exists" -ge 1 ]; then check "HTTPRoute resource exists" "true" else diff --git a/exercises/10-security-pvc/verify.sh b/exercises/10-security-pvc/verify.sh index 076c021..762a4d5 100644 --- a/exercises/10-security-pvc/verify.sh +++ b/exercises/10-security-pvc/verify.sh @@ -23,7 +23,7 @@ check() { echo "Verifying Exercise 10 — SecurityContext + PVC" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Namespace '$NAMESPACE' exists" "$ns_exists" # Task A — SecurityContext @@ -44,7 +44,7 @@ no_priv=$(kubectl get pod "$POD_A" -n "$NAMESPACE" -o jsonpath='{.spec.container check "allowPrivilegeEscalation is false" "$([ "$no_priv" = "false" ] && echo true || echo false)" # Task B — PVC -pvc_exists=$(kubectl get pvc data-pvc -n "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +pvc_exists=$(kubectl get pvc data-pvc -n "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "PVC 'data-pvc' exists" "$pvc_exists" POD_B="writer" diff --git a/exercises/11-statefulset/verify.sh b/exercises/11-statefulset/verify.sh index 023369a..0e79303 100644 --- a/exercises/11-statefulset/verify.sh +++ b/exercises/11-statefulset/verify.sh @@ -23,7 +23,7 @@ check() { echo "Verifying Exercise 11 — StatefulSet" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Namespace '$NAMESPACE' exists" "$ns_exists" # Check headless service @@ -31,7 +31,7 @@ svc_cluster_ip=$(kubectl get service db-headless -n "$NAMESPACE" -o jsonpath='{. check "Headless Service 'db-headless' exists (clusterIP: None)" "$([ "$svc_cluster_ip" = "None" ] && echo true || echo false)" # Check StatefulSet -sts_exists=$(kubectl get statefulset db -n "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +sts_exists=$(kubectl get statefulset db -n "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "StatefulSet 'db' exists" "$sts_exists" replicas=$(kubectl get statefulset db -n "$NAMESPACE" -o jsonpath='{.spec.replicas}' 2>/dev/null || echo 0) @@ -49,9 +49,9 @@ check "Pod db-1 exists" "$([ "$pod1" = "db-1" ] && echo true || echo false)" check "Pod db-2 exists" "$([ "$pod2" = "db-2" ] && echo true || echo false)" # Check PVCs -pvc0=$(kubectl get pvc data-db-0 -n "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) -pvc1=$(kubectl get pvc data-db-1 -n "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) -pvc2=$(kubectl get pvc data-db-2 -n "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +pvc0=$(kubectl get pvc data-db-0 -n "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) +pvc1=$(kubectl get pvc data-db-1 -n "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) +pvc2=$(kubectl get pvc data-db-2 -n "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "PVC data-db-0 exists" "$pvc0" check "PVC data-db-1 exists" "$pvc1" check "PVC data-db-2 exists" "$pvc2" diff --git a/exercises/12-daemonset/verify.sh b/exercises/12-daemonset/verify.sh index de48b56..a51e48b 100644 --- a/exercises/12-daemonset/verify.sh +++ b/exercises/12-daemonset/verify.sh @@ -23,11 +23,11 @@ check() { echo "Verifying Exercise 12 — DaemonSet" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Namespace '$NAMESPACE' exists" "$ns_exists" # Check DaemonSet exists -ds_exists=$(kubectl get daemonset log-collector -n "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ds_exists=$(kubectl get daemonset log-collector -n "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "DaemonSet 'log-collector' exists" "$ds_exists" # Check desired = available @@ -36,7 +36,7 @@ available=$(kubectl get daemonset log-collector -n "$NAMESPACE" -o jsonpath='{.s check "All desired pods are available ($desired/$available)" "$([ "$desired" = "$available" ] && echo true || echo false)" # Check node count matches pod count -node_count=$(kubectl get nodes --no-headers 2>/dev/null | wc -l || echo 0) +node_count=$(kubectl get nodes --no-headers 2>/dev/null | wc -l | tr -d ' ' || true) check "Pod count matches node count ($available nodes)" "$([ "$available" = "$node_count" ] && echo true || echo false)" # Check host-logs volume mount diff --git a/exercises/13-init-containers/verify.sh b/exercises/13-init-containers/verify.sh index bb6bad3..e5e2496 100644 --- a/exercises/13-init-containers/verify.sh +++ b/exercises/13-init-containers/verify.sh @@ -23,21 +23,21 @@ check() { echo "Verifying Exercise 13 — Init Containers" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Namespace '$NAMESPACE' exists" "$ns_exists" # Task A — web-app with init container pod_phase=$(kubectl get pod web-app -n "$NAMESPACE" -o jsonpath='{.status.phase}' 2>/dev/null || echo "") check "Pod 'web-app' is Running" "$([ "$pod_phase" = "Running" ] && echo true || echo false)" -init_count=$(kubectl get pod web-app -n "$NAMESPACE" -o jsonpath='{.spec.initContainers[*].name}' 2>/dev/null | wc -w || echo 0) +init_count=$(kubectl get pod web-app -n "$NAMESPACE" -o jsonpath='{.spec.initContainers[*].name}' 2>/dev/null | wc -w | tr -d ' ' || true) check "web-app has init container" "$([ "$init_count" -ge 1 ] && echo true || echo false)" # Task B — multi-init pod_b_phase=$(kubectl get pod multi-init -n "$NAMESPACE" -o jsonpath='{.status.phase}' 2>/dev/null || echo "") check "Pod 'multi-init' is Running" "$([ "$pod_b_phase" = "Running" ] && echo true || echo false)" -init_b_count=$(kubectl get pod multi-init -n "$NAMESPACE" -o jsonpath='{.spec.initContainers[*].name}' 2>/dev/null | wc -w || echo 0) +init_b_count=$(kubectl get pod multi-init -n "$NAMESPACE" -o jsonpath='{.spec.initContainers[*].name}' 2>/dev/null | wc -w | tr -d ' ' || true) check "multi-init has 2 init containers" "$([ "$init_b_count" -eq 2 ] && echo true || echo false)" # Check logs contain both config values diff --git a/exercises/14-in-place-scaling/verify.sh b/exercises/14-in-place-scaling/verify.sh index 5a02bc7..6cf29a0 100644 --- a/exercises/14-in-place-scaling/verify.sh +++ b/exercises/14-in-place-scaling/verify.sh @@ -23,7 +23,7 @@ check() { echo "Verifying Exercise 14 — In-Place Pod Vertical Scaling" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers 2>/dev/null && echo true || echo false) +ns_exists=$(kubectl get namespace "$NAMESPACE" --no-headers >/dev/null 2>&1 && echo true || echo false) check "Namespace '$NAMESPACE' exists" "$ns_exists" pod_phase=$(kubectl get pod resize-demo -n "$NAMESPACE" -o jsonpath='{.status.phase}' 2>/dev/null || echo "")