---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: zalando-postgres
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: zalando-postgres
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: zalando-postgres
subjects:
- kind: ServiceAccount
  name: zalando-postgres
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-pod-config
data:
  AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
  AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
  AWS_S3_FORCE_PATH_STYLE: "true"
  WAL_S3_BUCKET: ${NS}-dumps
  AWS_ENDPOINT: ${S3_ENDPOINT_COLD}
  WAL_S3_ENDPOINT: ${S3_ENDPOINT_COLD}
  AWS_REGION: default
  USE_WALE: "true"
  USE_WALG_BACKUP: "true"
  WALG_DISABLE_S3_SSE: "true"
  BACKUP_SCHEDULE: "5 0 * * *"
---
apiVersion: "acid.zalan.do/v1"
kind: postgresql
metadata:
  name: pg-${PG_DOMAIN}
spec:
  resources:
    limits:
      cpu: "2"
      memory: 1000Mi
    requests:
      cpu: 100m
      memory: 500Mi
  teamId: "pg"
  volume:
    size: 4975Mi
    storageClass: small
  numberOfInstances: 2
  users:
    hedgedoc:  # database owner
    - superuser
    - createdb
    discourse:  # database owner
    - superuser
    - createdb
    nextcloud:  # database owner
    - superuser
    - createdb
  databases:
    nextcloud: nextcloud # dbname: owner
    hedgedoc: hedgedoc # dbname: owner
    discourse: discourse # dbname: owner
  postgresql:
    version: "12"
---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  labels:
    application: spilo
    cluster-name: pg-${PG_DOMAIN} 
    team: pg
  name: ${PG_DOMAIN}-dump
spec:
  concurrencyPolicy: Forbid
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            application: spilo-logical-backup
            version: pg-${PG_DOMAIN}
        spec:
          affinity:
            podAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - podAffinityTerm:
                  labelSelector:
                    matchLabels:
                      application: spilo-logical-backup
                      version: pg-${PG_DOMAIN}
                  topologyKey: kubernetes.io/hostname
                weight: 1
          containers:
          - env:
            - name: SCOPE
              value: pg-${PG_DOMAIN}
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
            - name: LOGICAL_BACKUP_PROVIDER
              value: s3
            - name: CLUSTER_NAME_LABEL
              value: cluster-name
            - name: LOGICAL_BACKUP_S3_BUCKET
              value: ${NS}-dumps
            - name: LOGICAL_BACKUP_S3_ENDPOINT
              value: ${S3_ENDPOINT_COLD}
            - name: LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX
              value: "/nextcloud"
            - name: LOGICAL_BACKUP_S3_REGION
              value: default
            - name: LOGICAL_BACKUP_S3_SSE
              value: ""
            - name: PG_VERSION
              value: "12"
            - name: PGPORT
              value: "5432"
            - name: PGUSER
              value: postgres
            - name: PGSSLMODE
              value: require
            - name: PGPASSWORD
              valueFrom:
                secretKeyRef:
                  key: password
                  name: postgres.pg-${PG_DOMAIN}.credentials
            - name: AWS_S3_FORCE_PATH_STYLE
              value: "true"
            envFrom:
            - secretRef:
                name: ${NS}-dumps
            image: registry.opensource.zalan.do/acid/logical-backup:v1.6.2
            imagePullPolicy: IfNotPresent
            name: logical-backup
            resources:
              limits:
                cpu: "3"
                memory: 1Gi
              requests:
                cpu: 100m
                memory: 100Mi
            securityContext:
              privileged: false
              readOnlyRootFilesystem: false
          restartPolicy: Never
          schedulerName: default-scheduler
          serviceAccount: zalando-postgres
          serviceAccountName: zalando-postgres
  schedule: '15 2 * * *' 
---
apiVersion: core.libre.sh/v1alpha1
kind: Redis
metadata:
  name: ${FQDN}-redis
  namespace: ${NS}
spec:
  disableAuth: true
  persistence: {}
