#!/usr/bin/env bash set -euo pipefail ####################################################################### ### 1) CONFIGURATION ####################################################################### # Namespace and resource names NAMESPACE="firezone" # Namespace where everything lives CLUSTER_NAME="cluster-firezone" # CloudNativePG Cluster CR name SECRET_USER_NAME="firezone" # Secret name for the normal DB user (used in bootstrap) SECRET_SUPERUSER_NAME="izadmin" # Secret name for the Postgres superuser SECRET_FIREZONE="firezone-database" # Secret name that Firezone will use # CloudNativePG cluster settings POSTGRES_IMAGE="ghcr.io/cloudnative-pg/postgresql:16.2" STORAGE_CLASS="ceph-block" STORAGE_SIZE="20Gi" # Database credentials and names # IMPORTANT: Firezone is trying to connect to a database named "firebase" # so we set DB_NAME to "firebase" here. If you prefer a different name, # you must update Firezone’s configuration accordingly. DB_NAME="firebase" # The database to be created by initdb DB_APP_USER="firezone" # The owner (normal DB user) for the database DB_SUPERUSER="postgres" # Typical Postgres superuser name # Additional PostgreSQL parameters MAX_CONNECTIONS="200" SHARED_BUFFERS="256MB" # Generate random passwords (or set fixed ones if desired) DB_APP_PASSWORD="$(openssl rand -hex 16)" DB_SUPERUSER_PASSWORD="$(openssl rand -hex 16)" ####################################################################### ### 2) CREATE/UPDATE SECRETS FOR CLOUDNATIVE-PG ####################################################################### echo "Creating/updating secrets for CloudNativePG..." # Secret for the normal DB user (used during initdb bootstrap) oc -n "$NAMESPACE" create secret generic "$SECRET_USER_NAME" \ --type=kubernetes.io/basic-auth \ --from-literal=username="$DB_APP_USER" \ --from-literal=password="$DB_APP_PASSWORD" \ --dry-run=client -o yaml | oc apply -f - # Secret for the Postgres superuser oc -n "$NAMESPACE" create secret generic "$SECRET_SUPERUSER_NAME" \ --type=kubernetes.io/basic-auth \ --from-literal=username="$DB_SUPERUSER" \ --from-literal=password="$DB_SUPERUSER_PASSWORD" \ --dry-run=client -o yaml | oc apply -f - echo "Secrets for CloudNativePG created/updated." ####################################################################### ### 3) HANDLE THE CLOUDNATIVE-PG CLUSTER CR (FOR INITDB) ####################################################################### # The bootstrap (initdb) phase only runs when the cluster is first created. # To force a re‑initialization with the new settings, delete any existing cluster. if oc get cluster "$CLUSTER_NAME" -n "$NAMESPACE" >/dev/null 2>&1; then echo "CloudNativePG Cluster '$CLUSTER_NAME' already exists." echo "Deleting the existing cluster to force re‑initialization (initdb)..." oc delete cluster "$CLUSTER_NAME" -n "$NAMESPACE" # Wait until the cluster CR is fully deleted. echo "Waiting for cluster '$CLUSTER_NAME' to be deleted..." while oc get cluster "$CLUSTER_NAME" -n "$NAMESPACE" >/dev/null 2>&1; do sleep 5 done echo "Existing cluster deleted." fi echo "Creating CloudNativePG Cluster '$CLUSTER_NAME' with initdb bootstrap..." cat <