90 lines
2.4 KiB
YAML
90 lines
2.4 KiB
YAML
# 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
|