Vaibhav Pathak 7384bae7b1 Add ArgoCD sync wave annotations for dbinit ordering
- job-dbinit.yaml: Added argocd.argoproj.io/sync-wave: -1 to run before deployment
- deployment.yaml: Added argocd.argoproj.io/sync-wave: 0 to run after dbinit
- This ensures database schema is initialized before app starts
2026-01-05 17:24:56 +05:30

136 lines
4.6 KiB
YAML

{{- if .Values.dbInit.enabled }}
apiVersion: batch/v1
kind: Job
metadata:
name: {{ include "property-settings-svc-v2-chart.fullname" . }}-dbinit
labels:
{{- include "property-settings-svc-v2-chart.labels" . | nindent 4 }}
app.kubernetes.io/component: dbinit
annotations:
# ArgoCD sync wave - run before deployment (wave 0)
argocd.argoproj.io/sync-wave: "-1"
argocd.argoproj.io/hook: Sync
argocd.argoproj.io/hook-delete-policy: BeforeHookCreation
# Helm hooks (for non-ArgoCD deployments)
"helm.sh/hook": post-install,post-upgrade
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": before-hook-creation
spec:
backoffLimit: 5
ttlSecondsAfterFinished: 300
template:
metadata:
labels:
app.kubernetes.io/component: dbinit
{{- include "property-settings-svc-v2-chart.selectorLabels" . | nindent 8 }}
spec:
restartPolicy: OnFailure
initContainers:
# Wait for MySQL to be ready
- name: wait-for-db
image: busybox:1.36
command:
- sh
- -c
- |
echo "Waiting for database to be ready..."
until nc -z {{ include "property-settings-svc-v2-chart.databaseHost" . }} {{ include "property-settings-svc-v2-chart.databasePort" . }}; do
echo "Database is unavailable - sleeping"
sleep 2
done
echo "Database is up!"
sleep 10
containers:
- name: dbinit
image: mysql:8.0
env:
- name: MYSQL_HOST
value: {{ include "property-settings-svc-v2-chart.databaseHost" . | quote }}
- name: MYSQL_PORT
value: {{ include "property-settings-svc-v2-chart.databasePort" . | quote }}
- name: MYSQL_DATABASE
value: {{ include "property-settings-svc-v2-chart.databaseName" . | quote }}
- name: MYSQL_USER
value: {{ include "property-settings-svc-v2-chart.databaseUsername" . | quote }}
- name: MYSQL_PWD
value: {{ include "property-settings-svc-v2-chart.databasePassword" . | quote }}
command:
- /bin/bash
- -c
- |
set -ex
echo "========================================="
echo "Property Settings Database Migration"
echo "========================================="
echo "Host: ${MYSQL_HOST}:${MYSQL_PORT}"
echo "Database: ${MYSQL_DATABASE}"
echo "User: ${MYSQL_USER}"
echo "========================================="
# Test connection
echo "Testing database connection..."
if ! mysql -h"${MYSQL_HOST}" -P"${MYSQL_PORT}" -u"${MYSQL_USER}" -e "SELECT 1" 2>/dev/null; then
echo "ERROR: Cannot connect to database"
exit 1
fi
echo "✓ Database connection successful"
echo ""
# Apply migrations in order
TOTAL=0
SUCCESS=0
FAILED=0
for sql_file in /migrations/*.sql; do
if [ ! -f "$sql_file" ]; then
continue
fi
filename=$(basename "$sql_file")
TOTAL=$((TOTAL + 1))
echo -n "Applying $filename... "
if mysql -h"${MYSQL_HOST}" -P"${MYSQL_PORT}" -u"root" < "$sql_file" 2>/tmp/migration_error.log; then
echo "✓ SUCCESS"
SUCCESS=$((SUCCESS + 1))
else
echo "✗ FAILED"
echo "Error details:"
cat /tmp/migration_error.log
FAILED=$((FAILED + 1))
# Stop on first error
echo ""
echo "========================================="
echo "Migration failed at: $filename"
echo "========================================="
exit 1
fi
done
echo ""
echo "========================================="
echo "Migration Summary:"
echo " Total: $TOTAL"
echo " Success: $SUCCESS"
echo " Failed: $FAILED"
echo "========================================="
if [ $FAILED -eq 0 ]; then
echo "✓ All migrations completed successfully!"
exit 0
else
echo "✗ Some migrations failed"
exit 1
fi
volumeMounts:
- name: sql-migrations
mountPath: /migrations
volumes:
- name: sql-migrations
configMap:
name: {{ include "property-settings-svc-v2-chart.fullname" . }}-sql-migrations
{{- end }}