titan-iac/services/comms/mas-db-ensure-job.yaml

53 lines
1.8 KiB
YAML
Raw Normal View History

2026-01-08 02:45:00 -03:00
# services/comms/mas-db-ensure-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
2026-01-08 03:06:34 -03:00
name: mas-db-ensure-8
2026-01-08 02:45:00 -03:00
namespace: comms
spec:
2026-01-08 03:00:19 -03:00
backoffLimit: 0
ttlSecondsAfterFinished: 600
2026-01-08 02:45:00 -03:00
template:
spec:
serviceAccountName: mas-db-ensure
restartPolicy: OnFailure
2026-01-08 03:04:33 -03:00
containers:
- name: ensure
2026-01-08 02:45:00 -03:00
image: bitnami/kubectl:latest
command: ["/bin/sh", "-c"]
args:
- |
2026-01-08 03:00:19 -03:00
set -eu
2026-01-08 02:45:00 -03:00
umask 077
if kubectl -n comms get secret mas-db >/dev/null 2>&1; then
2026-01-08 03:04:33 -03:00
MAS_PASS="$(kubectl -n comms get secret mas-db -o jsonpath='{.data.password}' | base64 -d)"
2026-01-08 02:45:00 -03:00
else
2026-01-08 03:04:33 -03:00
MAS_PASS="$(head -c 32 /dev/urandom | base64 | tr -d '\n')"
kubectl -n comms create secret generic mas-db --from-literal=password="${MAS_PASS}" >/dev/null
2026-01-08 02:45:00 -03:00
fi
2026-01-08 03:04:33 -03:00
2026-01-08 03:06:34 -03:00
POD_NAME="$(kubectl -n postgres get pods -l app=postgres -o jsonpath='{.items[0].metadata.name}')"
if [ -z "${POD_NAME}" ]; then
echo "postgres pod not found" >&2
2026-01-08 03:04:33 -03:00
exit 1
fi
kubectl -n postgres exec -i "${POD_NAME}" -- psql -U postgres -d postgres -v ON_ERROR_STOP=1 -v mas_pass="${MAS_PASS}" <<'SQL'
2026-01-08 02:45:00 -03:00
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_catalog.pg_roles WHERE rolname = 'mas') THEN
EXECUTE format('CREATE ROLE mas LOGIN PASSWORD %L', :mas_pass);
ELSE
EXECUTE format('ALTER ROLE mas WITH PASSWORD %L', :mas_pass);
END IF;
END
$$;
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_database WHERE datname = 'mas') THEN
CREATE DATABASE mas OWNER mas;
END IF;
END
$$;
SQL