45 lines
1.8 KiB
YAML
45 lines
1.8 KiB
YAML
# services/comms/mas-db-ensure-job.yaml
|
|
apiVersion: batch/v1
|
|
kind: Job
|
|
metadata:
|
|
name: mas-db-ensure-12
|
|
namespace: comms
|
|
spec:
|
|
backoffLimit: 1
|
|
ttlSecondsAfterFinished: 600
|
|
template:
|
|
spec:
|
|
serviceAccountName: mas-db-ensure
|
|
restartPolicy: Never
|
|
containers:
|
|
- name: ensure
|
|
image: bitnami/kubectl:latest
|
|
command: ["/bin/sh", "-c"]
|
|
args:
|
|
- |
|
|
set -eu
|
|
trap 'echo "mas-db-ensure failed"; sleep 300' ERR
|
|
umask 077
|
|
EXISTING_B64="$(kubectl -n comms get secret mas-db -o jsonpath='{.data.password}' 2>/dev/null || true)"
|
|
if [ -n "${EXISTING_B64}" ]; then
|
|
MAS_PASS="$(printf '%s' "${EXISTING_B64}" | base64 -d)"
|
|
else
|
|
MAS_PASS="$(head -c 32 /dev/urandom | base64 | tr -d '\n')"
|
|
MAS_B64="$(printf '%s' "${MAS_PASS}" | base64 | tr -d '\n')"
|
|
payload="$(printf '{"data":{"password":"%s"}}' "${MAS_B64}")"
|
|
kubectl -n comms patch secret mas-db --type=merge -p "${payload}" >/dev/null
|
|
fi
|
|
|
|
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
|
|
exit 1
|
|
fi
|
|
|
|
kubectl -n postgres exec -i "${POD_NAME}" -- psql -U postgres -d postgres -v mas_pass="${MAS_PASS}" \
|
|
-c "CREATE ROLE mas LOGIN PASSWORD :'mas_pass';" || true
|
|
kubectl -n postgres exec -i "${POD_NAME}" -- psql -U postgres -d postgres -v mas_pass="${MAS_PASS}" \
|
|
-c "ALTER ROLE mas WITH PASSWORD :'mas_pass';"
|
|
kubectl -n postgres exec -i "${POD_NAME}" -- psql -U postgres -d postgres \
|
|
-c "CREATE DATABASE mas OWNER mas;" || true
|