#!/bin/bash # ========================================== # resume-app.sh — Restarts AKS nodes and redeploys the app # # What this script does: # 1. Scales the node pool to 1 → one VM starts up # 2. Redeploys all Kubernetes objects (namespace, secret, configmap, etc.) # 3. The existing PVC is remounted → data intact # # Prerequisites: prepare-app_test.sh must have been run at least once, # and DB_USER / DB_PASSWORD must be exported. # ========================================== set -euo pipefail # ========================================== # LOGGER — source the shared library # ========================================== # shellcheck source=lib/logger.sh source "$(dirname "$0")/lib/logger.sh" "resume" trap 'log_error "Failure at line $LINENO. See $LOG_FILE"' ERR # ========================================== # VARIABLES # ========================================== RESOURCE_GROUP="ExamApp-RG" AKS_NAME="ExamApp-AKS" ACR_NAME="examappregistrycharles" DB_NAME="postgres" if [ -z "${DB_USER:-}" ] || [ -z "${DB_PASSWORD:-}" ]; then log_error "DB_USER and DB_PASSWORD must be exported before running this script." log_error " export DB_USER=\"postgres\"" log_error " export DB_PASSWORD=\"your_password\"" exit 1 fi log_info "========================================" log_info " Vigimeteo – Resume" log_info " Log: $LOG_FILE" log_info "========================================" # Step 1: Start the AKS cluster (restarts all previously deallocated VMs) # az aks start is the counterpart of az aks stop used in pause-app.sh. log_info "Starting AKS cluster '$AKS_NAME' (reallocating VMs)..." az aks start \ --resource-group "$RESOURCE_GROUP" \ --name "$AKS_NAME" log_info "AKS cluster started." # Step 2: Reconfigure kubectl az aks get-credentials \ --resource-group "$RESOURCE_GROUP" \ --name "$AKS_NAME" \ --overwrite-existing log_info "kubectl configured." # Step 3: Redeploy Kubernetes objects ACR_LOGIN_SERVER=$(az acr show --name "$ACR_NAME" \ --resource-group "$RESOURCE_GROUP" --query loginServer --output tsv) kubectl apply -f namespace.yaml kubectl create secret generic db-credentials --namespace vigimeteo \ --from-literal=host="vigimeteo-db.vigimeteo.svc.cluster.local" \ --from-literal=port="5432" \ --from-literal=dbname="$DB_NAME" \ --from-literal=username="$DB_USER" \ --from-literal=password="$DB_PASSWORD" \ --dry-run=client -o yaml | kubectl apply -f - log_info "Secret 'db-credentials' applied." kubectl create configmap vigimeteo-db-init --namespace vigimeteo \ --from-file=init_db.sql=./sql/init_db.sql \ --dry-run=client -o yaml | kubectl apply -f - log_info "ConfigMap 'vigimeteo-db-init' applied." # The StatefulSet will remount the existing PVC — data is preserved kubectl apply -f statefulset.yaml kubectl apply -f service.yaml sed "s|MON_REGISTRE|$ACR_LOGIN_SERVER|g" deployment.yaml | kubectl apply -f - log_info "StatefulSet, Services and Deployment applied." log_info "Waiting for all pods to be Ready (max 2 min)..." if kubectl wait --for=condition=Ready pod \ --all -n vigimeteo --timeout=120s; then log_info "All pods are Ready." else log_warn "Some pods are not yet Ready — check status:" kubectl get pods -n vigimeteo | tee -a "$LOG_FILE" fi # Print the public URL as a reminder PUBLIC_IP=$(kubectl get svc ingress-nginx-controller -n ingress-nginx \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null || echo "unknown") log_info "========================================" log_info "App is back online!" log_info "Public IP: $PUBLIC_IP" log_info "kubectl get pods -n vigimeteo" log_info "========================================"