#!/usr/bin/env bash set -euo pipefail echo "[prepare-app] Preparing Task Manager for Kubernetes..." # 1. Ensure minikube is running if ! minikube status >/dev/null 2>&1; then echo "[prepare-app] minikube is not running. Starting it..." minikube start else echo "[prepare-app] minikube is already running." fi # 2. Point local docker at minikube's daemon so images land inside the cluster echo "[prepare-app] Switching docker context to minikube..." eval "$(minikube -p minikube docker-env)" # 3. Build the two custom images echo "[prepare-app] Building taskapp-api:v1..." docker build -t taskapp-api:v1 backend/ echo "[prepare-app] Building taskapp-web:v1..." docker build -t taskapp-web:v1 frontend/ # 4. Create the hostPath directory on the minikube node echo "[prepare-app] Creating /mnt/data/taskapp-db on the minikube node..." minikube ssh -- "sudo mkdir -p /mnt/data/taskapp-db && sudo chmod 777 /mnt/data/taskapp-db" # 5. Apply the namespace (so the PVC has a place to live) and the StatefulSet stack. # The namespace must exist before namespaced objects (PVC, StatefulSet) can be created, # so we apply and then poll for it to exist before continuing. echo "[prepare-app] Creating Namespace, Secret, ConfigMap..." kubectl apply -f namespace.yaml echo "[prepare-app] Waiting for taskapp namespace to be available..." for _ in $(seq 1 20); do if kubectl get namespace taskapp >/dev/null 2>&1; then break fi sleep 1 done echo "[prepare-app] Creating PV, PVC, StatefulSet..." kubectl apply -f statefulset.yaml echo "[prepare-app] App prepared." echo "[prepare-app] Run ./start-app.sh to bring up the rest."