kind: ConfigMap
apiVersion: v1
metadata:
  name: postgresql-init-sql
  namespace: xl-platform
data:
  init-sql.sh: |-
    #!/bin/bash
    set -e

    psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
        
        
        CREATE USER "{{XLR_DB_USER}}" WITH ENCRYPTED PASSWORD '{{XLR_DB_PASS}}';
        CREATE DATABASE "{{XLR_DB_NAME}}";
        GRANT ALL PRIVILEGES ON DATABASE "{{XLR_DB_NAME}}" TO "{{XLR_DB_USER}}";

        CREATE USER "{{XLR_REPORT_DB_USER}}" WITH ENCRYPTED PASSWORD '{{XLR_REPORT_DB_PASS}}';
        CREATE DATABASE "{{XLR_REPORT_DB_NAME}}";
        GRANT ALL PRIVILEGES ON DATABASE "{{XLR_REPORT_DB_NAME}}" TO "{{XLR_REPORT_DB_USER}}";
        
    EOSQL
---
apiVersion: v1
kind: Service
metadata:
  name: postgresql
  namespace: xl-platform
  labels:
    app: postgresql
spec:
  ports:
    - port: 5432
  selector:
    app: postgresql
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgresql
  namespace: xl-platform
  labels:
    app: postgresql
spec:
  selector:
    matchLabels:
      app: postgresql
  template:
    metadata:
      labels:
        app: postgresql
    spec:
      initContainers:
        - name: "remove-lost-found"
          image: "busybox:1.26.2"
          imagePullPolicy: "IfNotPresent"
          command:
            - 'sh'
            - '-c'
            - 'rm -rf /var/lib/postgresql/data/lost+found'
          volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: postgresql
      containers:
        - image: postgres:10.5
          name: postgresql
          command: ["docker-entrypoint.sh"]
          args:
            - "-c"
            - "max_connections={{POSTGRES_MAX_CONN}}"
            - "-c"
            - "synchronous_commit={{POSTGRES_SYNC_COMMIT}}"
            - "-c"
            - "effective_cache_size={{POSTGRES_EFFECT_CACHE_SIZE}}"
            - "-c"
            - "shared_buffers={{POSTGRES_SHARED_BUFF}}"
            - "-c"
            - "max_wal_size={{POSTGRES_MAX_WALL_SIZE}}"
          env:
            - name: POSTGRES_USER
              value: postgres
            - name: POSTGRES_DB
              value: postgres
          resources:
            requests:
              memory: 2Gi
              cpu: "1"
            limits:
              memory: "3Gi"
              cpu: "1.1"
          ports:
            - containerPort: 5432
              name: postgresql
          volumeMounts:
            - name: postgresql
              mountPath: /var/lib/postgresql/data
            - name: postgresql-init-sql
              subPath: init-sql.sh
              mountPath: /docker-entrypoint-initdb.d/init-sql.sh
      volumes:
        - name: postgresql-init-sql
          configMap:
            name: postgresql-init-sql
            defaultMode: 0777
        - name: postgresql
          persistentVolumeClaim:
            claimName: postgres-claim