Files
homelab/k8s/bootstrap-local/05-wait-for-databases.yaml
T

90 lines
2.4 KiB
YAML
Raw Normal View History

# Wait-for-databases Job - ensures Database CRs are reconciled before apps start
# This solves the race condition where Forgejo starts before CNPG creates the database
apiVersion: batch/v1
kind: Job
metadata:
name: wait-for-databases
namespace: ddb
annotations:
description: "Waits for CNPG to reconcile Database CRs and create databases in PostgreSQL"
spec:
backoffLimit: 5
template:
metadata:
name: wait-for-databases
spec:
restartPolicy: Never
serviceAccountName: wait-for-databases
containers:
- name: wait
image: bitnami/kubectl:latest
command:
- /bin/bash
- -c
- |
set -euo pipefail
echo "==> Waiting for CNPG Database CRs to be reconciled..."
DATABASES="forgejo authentik temporal temporal-visibility"
for db in $DATABASES; do
echo "Checking database: $db"
for i in {1..60}; do
# Check if Database CR exists and is ready
READY=$(kubectl get database $db -n ddb -o jsonpath='{.status.ready}' 2>/dev/null || echo "false")
if [ "$READY" = "true" ]; then
echo " ✓ $db is ready"
break
fi
echo " Waiting for $db to be ready... ($i/60)"
sleep 5
if [ $i -eq 60 ]; then
echo " ✗ Timeout waiting for $db"
exit 1
fi
done
done
echo ""
echo "==> All databases are ready!"
echo "CNPG has created the following databases:"
kubectl get databases -n ddb
echo ""
echo "✅ Safe to deploy applications now"
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: wait-for-databases
namespace: ddb
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: wait-for-databases
namespace: ddb
rules:
- apiGroups: ["postgresql.cnpg.io"]
resources: ["databases"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: wait-for-databases
namespace: ddb
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: wait-for-databases
subjects:
- kind: ServiceAccount
name: wait-for-databases
namespace: ddb