apiVersion: batch/v1 kind: Job metadata: name: bookwyrm-db-init namespace: bookwyrm spec: template: metadata: labels: component: db-init spec: securityContext: runAsNonRoot: true runAsUser: 999 runAsGroup: 999 seccompProfile: type: RuntimeDefault restartPolicy: OnFailure containers: - name: db-init image: postgres:16-alpine securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL readOnlyRootFilesystem: false env: - name: PGHOST value: "{{ .db.host }}" - name: PGPORT value: "{{ .db.port }}" - name: PGUSER value: postgres - name: PGPASSWORD valueFrom: secretKeyRef: name: bookwyrm-secrets key: postgres.password - name: BOOKWYRM_DB_USER value: "{{ .db.user }}" - name: BOOKWYRM_DB_NAME value: "{{ .db.name }}" - name: BOOKWYRM_DB_PASSWORD valueFrom: secretKeyRef: name: bookwyrm-secrets key: dbPassword command: - /bin/sh - -c - | echo "Initializing BookWyrm database..." # Create user if it doesn't exist psql -c " DO \$\$ BEGIN IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '$BOOKWYRM_DB_USER') THEN CREATE USER \"$BOOKWYRM_DB_USER\" WITH PASSWORD '$BOOKWYRM_DB_PASSWORD'; ELSE ALTER USER \"$BOOKWYRM_DB_USER\" WITH PASSWORD '$BOOKWYRM_DB_PASSWORD'; END IF; END \$\$; " # Create database if it doesn't exist if ! psql -lqt | cut -d \| -f 1 | grep -qw "$BOOKWYRM_DB_NAME"; then echo "Creating database $BOOKWYRM_DB_NAME..." createdb -O "$BOOKWYRM_DB_USER" "$BOOKWYRM_DB_NAME" else echo "Database $BOOKWYRM_DB_NAME already exists." fi # Grant privileges psql -d "$BOOKWYRM_DB_NAME" -c " GRANT ALL PRIVILEGES ON DATABASE \"$BOOKWYRM_DB_NAME\" TO \"$BOOKWYRM_DB_USER\"; GRANT ALL ON SCHEMA public TO \"$BOOKWYRM_DB_USER\"; GRANT USAGE ON SCHEMA public TO \"$BOOKWYRM_DB_USER\"; " echo "Database initialization completed."