# Copyright © 2018 Amdocs, AT&T, Bell Canada
# Modifications Copyright (C) 2021 Bell Canada.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#################################################################
# Global configuration defaults.
#################################################################
global:
  nodePortPrefix: 302
  persistence: {}

#################################################################
# Secrets metaconfig
#################################################################
secrets:
  - uid: '{{ include "common.postgres.secret.rootPassUID" . }}'
    type: password
    externalSecret: '{{ tpl (default "" .Values.config.pgRootPasswordExternalSecret) . }}'
    password: '{{ .Values.config.pgRootPassword }}'
  - uid: '{{ include "common.postgres.secret.userCredentialsUID" . }}'
    type: basicAuth
    externalSecret: '{{ tpl (default "" .Values.config.pgUserExternalSecret) . }}'
    login: '{{ .Values.config.pgUserName }}'
    password: '{{ .Values.config.pgUserPassword }}'
  - uid: '{{ include "common.postgres.secret.primaryPasswordUID" . }}'
    type: password
    externalSecret: '{{ tpl (default "" .Values.config.pgPrimaryPasswordExternalSecret) . }}'
    password: '{{ .Values.config.pgPrimaryPassword }}'

#################################################################
# Application configuration defaults.
#################################################################

# bitnami image doesn't support well single quote in password
passwordStrengthOverride: basic

pullPolicy: Always

# application configuration
config:
  pgUserName: testuser
  pgDatabase: userdb
  pgDataPath: data
  # pgPrimaryPassword: password
  # pgUserPassword: password
  # pgRootPassword: password

container:
  name:
    primary: pgset-primary
    replica: pgset-replica

nodeSelector: {}

affinity: {}

# probe configuration parameters
liveness:
  initialDelaySeconds: 300
  periodSeconds: 10
  timeoutSeconds: 5
  # necessary to disable liveness probe when setting breakpoints
  # in debugger so K8s doesn't restart unresponsive container
  enabled: true

readiness:
  initialDelaySeconds: 10
  periodSeconds: 10

## Persist data to a persitent volume
persistence:
  enabled: true

  ## A manually managed Persistent Volume and Claim
  ## Requires persistence.enabled: true
  ## If defined, PVC must be created manually before volume will be bound
  # existingClaim:
  volumeReclaimPolicy: Retain

  ## database data Persistent Volume Storage Class
  ## If defined, storageClassName: <storageClass>
  ## If set to "-", storageClassName: "", which disables dynamic provisioning
  ## If undefined (the default) or set to null, no storageClassName spec is
  ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
  ##   GKE, AWS & OpenStack)
  accessMode: ReadWriteOnce
  size: 1Gi
  mountPath: /dockerdata-nfs
  mountSubPath: postgres/data
  mountInitPath: postgres

service:
  type: ClusterIP
  name: pgset
  portName: tcp-postgres
  externalPort: 5432
  internalPort: 5432
  type2: ClusterIP
  name2: tcp-pgset-primary
  portName2: tcp-postgres
  externalPort2: 5432
  internalPort2: 5432
  type3: ClusterIP
  name3: tcp-pgset-replica
  portName3: tcp-postgres
  externalPort3: 5432
  internalPort3: 5432

ingress:
  enabled: false

flavor: small

#resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
#
# Example:
# Configure resource requests and limits
# ref: http://kubernetes.io/docs/user-guide/compute-resources/
# Minimum memory for development is 2 CPU cores and 4GB memory
# Minimum memory for production is 4 CPU cores and 8GB memory
resources:
  small:
    limits:
      cpu: 100m
      memory: 300Mi
    requests:
      cpu: 10m
      memory: 90Mi
  large:
    limits:
      cpu: 2
      memory: 4Gi
    requests:
      cpu: 1
      memory: 2Gi
  unlimited: {}

metrics:
  enabled: false
  ## Bitnami Postgres Prometheus exporter image
  ## ref: https://hub.docker.com/r/bitnami/postgres-exporter/tags/
  ##
  image: bitnami/postgres-exporter:0.11.1
  pullPolicy: Always
  ports:
  - name: tcp-metrics
    port: 9187
  ## Postgres exporter additional command line flags
  ## Can be used to specify command line flags
  ## E.g.:
  ## extraFlags:
  ##   - --collect.binlog_size
  ##
  extraFlags: []
  ## Postgres Prometheus exporter containers' resource requests and limits
  ## ref: http://kubernetes.io/docs/user-guide/compute-resources/
  ##
  resources:
    # We usually recommend not to specify default resources and to leave this as a conscious
    # choice for the user. This also increases chances charts run on environments with little
    # resources, such as Minikube. If you do want to specify resources, uncomment the following
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
    limits:
      cpu: 0.5
      memory: 256Mi
    requests:
      cpu: 0.5
      memory: 256Mi
  ## Postgres metrics container's liveness and readiness probes
  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
  ##
  postgresUser: "postgres"
  livenessProbe:
    enabled: true
    initialDelaySeconds: 30
    periodSeconds: 10
    timeoutSeconds: 180
    successThreshold: 1
    failureThreshold: 3
  readinessProbe:
    enabled: true
    initialDelaySeconds: 30
    periodSeconds: 10
    timeoutSeconds: 180
    successThreshold: 1
    failureThreshold: 3
  ## Postgres Prometheus exporter service parameters
  ##
  service:
    type2: ClusterIP
    port2: 9187
    type3: ClusterIP
    port3: 9187
    annotations:
      prometheus.io/scrape: "true"
      prometheus.io/port: "9187"
  serviceMonitor:
    enabled: false
    basicAuth:
      enabled: false
    ## Namespace in which Prometheus is running
    ##
    ## namespace: monitoring
    ##
    ## Interval at which metrics should be scraped.
    ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
    ##
    ## interval: 10s
    ##
    ## Timeout after which the scrape is ended
    ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
    ##
    ## scrapeTimeout: 10s
    ## Add your label under which prometheus is discovering resources
    ## labels:
      ## release: kube-prometheus-stack
    ##
    ## ServiceMonitor selector labels
    ## ref: https://github.com/bitnami/charts/tree/master/bitnami/prometheus-operator#prometheus-configuration
    ##
    ## selector:
      ## monitoring: enabled
    ##
    ## RelabelConfigs to apply to samples before scraping
    ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#relabelconfig
    ## Value is evalued as a template
    ##
    relabelings: []
    ##
    ## MetricRelabelConfigs to apply to samples before ingestion
    ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#relabelconfig
    ## Value is evalued as a template
    ##
    metricRelabelings: []
