diff --git a/prepare-app.sh b/prepare-app.sh new file mode 100644 index 0000000..edb044d --- /dev/null +++ b/prepare-app.sh @@ -0,0 +1,47 @@ +#!/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."