k8s/infrastructure/modules/postgres-app/job.yaml

64 lines
1.6 KiB
YAML
Raw Normal View History

2026-04-26 06:18:40 +00:00
apiVersion: batch/v1
kind: Job
metadata:
name: postgres-init
spec:
2026-04-26 23:08:25 +00:00
dependsOn:
- name: infrastructure
2026-04-26 06:18:40 +00:00
template:
spec:
restartPolicy: OnFailure
containers:
- name: psql
image: postgres:16
env:
- name: PGHOST
value: pg-cluster-rw.pg-databases.svc.cluster.local
- name: PGUSER
value: postgres
- name: PGPASSWORD
valueFrom:
secretKeyRef:
2026-04-27 02:35:33 +00:00
name: pg-cluster-root-password
2026-04-27 03:21:23 +00:00
key: password
2026-04-26 06:18:40 +00:00
- name: APP_DB
valueFrom:
secretKeyRef:
2026-04-27 01:04:59 +00:00
name: app-db-secret
2026-04-26 06:18:40 +00:00
key: database
- name: APP_USER
valueFrom:
secretKeyRef:
2026-04-27 01:04:59 +00:00
name: app-db-secret
2026-04-26 06:18:40 +00:00
key: username
- name: APP_PASSWORD
valueFrom:
secretKeyRef:
2026-04-27 01:04:59 +00:00
name: app-db-secret
2026-04-26 06:18:40 +00:00
key: password
command:
- sh
- -c
- |
psql <<EOF
-- Create user (safe in transaction)
2026-04-26 06:18:40 +00:00
DO \$\$
BEGIN
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${APP_USER}') THEN
CREATE USER ${APP_USER} WITH PASSWORD '${APP_PASSWORD}';
END IF;
END
\$\$;
-- Create database (must be outside transaction)
SELECT 'CREATE DATABASE ${APP_DB} OWNER ${APP_USER}'
WHERE NOT EXISTS (
SELECT FROM pg_database WHERE datname = '${APP_DB}'
)\gexec
2026-04-26 06:18:40 +00:00
-- Grant privileges (safe)
2026-04-26 06:18:40 +00:00
GRANT ALL PRIVILEGES ON DATABASE ${APP_DB} TO ${APP_USER};
EOF