---
# yaml-language-server: $schema=https://ks.hsn.dev/postgres-operator.crunchydata.com/postgrescluster_v1beta1.json
apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
  name: "${APP}"
spec:
  postgresVersion: 16
  dataSource:
    pgbackrest:
      stanza: db
      configuration:
        - secret:
            name: pgo-s3-creds
      global:
        repo1-path: "/${APP}/repo1"
        repo1-s3-uri-style: path
      repo:
        name: repo1
        s3:
          bucket: "crunchy-postgres"
          endpoint: "s3.hsn.dev"
          region: "us-east-1"
  patroni:
    dynamicConfiguration:
      synchronous_mode: true
      postgresql:
        synchronous_commit: "on"
        pg_hba:
          - hostnossl all all 10.32.0.0/16 md5
          - hostssl all all all md5
  instances:
    - name: postgres
      metadata:
        labels:
          app.kubernetes.io/name: pgo-${APP}
      replicas: 2
      dataVolumeClaimSpec:
        storageClassName: openebs-hostpath
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 5Gi
      topologySpreadConstraints:
        - maxSkew: 1
          topologyKey: "kubernetes.io/hostname"
          whenUnsatisfiable: "DoNotSchedule"
          labelSelector:
            matchLabels:
              postgres-operator.crunchydata.com/cluster: ${APP}
              postgres-operator.crunchydata.com/data: postgres
  users:
    - name: "${DB_USER}"
      databases:
        - "prowlarr_main"
        - "prowlarr_logs"
      options: "SUPERUSER"
      password:
        type: AlphaNumeric
  backups:
    pgbackrest:
      configuration:
        - secret:
            name: pgo-s3-creds
      global:
        archive-push-queue-max: 4GiB
        repo1-retention-full: "14"
        repo1-retention-full-type: time
        repo1-path: "/${APP}/repo1"
        repo1-s3-uri-style: path
      manual:
        repoName: repo1
        options:
          - --type=full
      metadata:
        labels:
          app.kubernetes.io/name: pgo-${APP}-backup
      repos:
        - name: repo1
          schedules:
            full: "0 1 * * 0"
            differential: "0 1 * * 1-6"
          s3:
            bucket: "crunchy-postgres"
            endpoint: "s3.hsn.dev"
            region: "us-east-1"