Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion exercises/01-pod-basics/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions exercises/02-multi-container-pod/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 10 additions & 9 deletions exercises/03-configmap-secret/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
16 changes: 8 additions & 8 deletions exercises/04-rbac/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 ""
Expand Down
6 changes: 3 additions & 3 deletions exercises/05-networkpolicy/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 ""
Expand Down
6 changes: 3 additions & 3 deletions exercises/06-rolling-update/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 ""
Expand Down
8 changes: 4 additions & 4 deletions exercises/07-helm/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 ""
Expand Down
4 changes: 2 additions & 2 deletions exercises/08-probes/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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)"

Expand Down
6 changes: 3 additions & 3 deletions exercises/09-ingress-gateway/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,19 @@ 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
ingress_host=$(kubectl get ingress -n "$NAMESPACE" -o jsonpath='{.items[0].spec.rules[0].host}' 2>/dev/null || echo "")
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
Expand Down
4 changes: 2 additions & 2 deletions exercises/10-security-pvc/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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"
Expand Down
10 changes: 5 additions & 5 deletions exercises/11-statefulset/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@ 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
svc_cluster_ip=$(kubectl get service db-headless -n "$NAMESPACE" -o jsonpath='{.spec.clusterIP}' 2>/dev/null || echo "")
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)
Expand All @@ -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"
Expand Down
6 changes: 3 additions & 3 deletions exercises/12-daemonset/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
6 changes: 3 additions & 3 deletions exercises/13-init-containers/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion exercises/14-in-place-scaling/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 "")
Expand Down
Loading