123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406 |
- {{/*
- Copyright VMware, Inc.
- SPDX-License-Identifier: APACHE-2.0
- */}}
- {{/* vim: set filetype=mustache: */}}
- {{/*
- Create a default fully qualified app name for PostgreSQL Primary objects
- We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
- */}}
- {{- define "postgresql.v1.primary.fullname" -}}
- {{- if eq .Values.architecture "replication" -}}
- {{- printf "%s-%s" (include "common.names.fullname" .) .Values.primary.name | trunc 63 | trimSuffix "-" -}}
- {{- else -}}
- {{- include "common.names.fullname" . -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Create a default fully qualified app name for PostgreSQL read-only replicas objects
- We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
- */}}
- {{- define "postgresql.v1.readReplica.fullname" -}}
- {{- printf "%s-%s" (include "common.names.fullname" .) .Values.readReplicas.name | trunc 63 | trimSuffix "-" -}}
- {{- end -}}
- {{/*
- Create the default FQDN for PostgreSQL primary headless service
- We truncate at 63 chars because of the DNS naming spec.
- */}}
- {{- define "postgresql.v1.primary.svc.headless" -}}
- {{- printf "%s-hl" (include "postgresql.v1.primary.fullname" .) | trunc 63 | trimSuffix "-" -}}
- {{- end -}}
- {{/*
- Create the default FQDN for PostgreSQL read-only replicas headless service
- We truncate at 63 chars because of the DNS naming spec.
- */}}
- {{- define "postgresql.v1.readReplica.svc.headless" -}}
- {{- printf "%s-hl" (include "postgresql.v1.readReplica.fullname" .) | trunc 63 | trimSuffix "-" -}}
- {{- end -}}
- {{/*
- Return the proper PostgreSQL image name
- */}}
- {{- define "postgresql.v1.image" -}}
- {{ include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) }}
- {{- end -}}
- {{/*
- Return the proper PostgreSQL metrics image name
- */}}
- {{- define "postgresql.v1.metrics.image" -}}
- {{ include "common.images.image" (dict "imageRoot" .Values.metrics.image "global" .Values.global) }}
- {{- end -}}
- {{/*
- Return the proper image name (for the init container volume-permissions image)
- */}}
- {{- define "postgresql.v1.volumePermissions.image" -}}
- {{ include "common.images.image" (dict "imageRoot" .Values.volumePermissions.image "global" .Values.global) }}
- {{- end -}}
- {{/*
- Return the proper Docker Image Registry Secret Names
- */}}
- {{- define "postgresql.v1.imagePullSecrets" -}}
- {{ include "common.images.renderPullSecrets" (dict "images" (list .Values.image .Values.metrics.image .Values.volumePermissions.image) "context" $) }}
- {{- end -}}
- {{/*
- Return the name for a custom user to create
- */}}
- {{- define "postgresql.v1.username" -}}
- {{- if .Values.global.postgresql.auth.username -}}
- {{- .Values.global.postgresql.auth.username -}}
- {{- else -}}
- {{- .Values.auth.username -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Return the name for a custom database to create
- */}}
- {{- define "postgresql.v1.database" -}}
- {{- if .Values.global.postgresql.auth.database -}}
- {{- printf "%s" (tpl .Values.global.postgresql.auth.database $) -}}
- {{- else if .Values.auth.database -}}
- {{- printf "%s" (tpl .Values.auth.database $) -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Get the password secret.
- */}}
- {{- define "postgresql.v1.secretName" -}}
- {{- if .Values.global.postgresql.auth.existingSecret -}}
- {{- printf "%s" (tpl .Values.global.postgresql.auth.existingSecret $) -}}
- {{- else if .Values.auth.existingSecret -}}
- {{- printf "%s" (tpl .Values.auth.existingSecret $) -}}
- {{- else -}}
- {{- printf "%s" (include "common.names.fullname" .) -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Get the replication-password key.
- */}}
- {{- define "postgresql.v1.replicationPasswordKey" -}}
- {{- if or .Values.global.postgresql.auth.existingSecret .Values.auth.existingSecret -}}
- {{- if .Values.global.postgresql.auth.secretKeys.replicationPasswordKey -}}
- {{- printf "%s" (tpl .Values.global.postgresql.auth.secretKeys.replicationPasswordKey $) -}}
- {{- else if .Values.auth.secretKeys.replicationPasswordKey -}}
- {{- printf "%s" (tpl .Values.auth.secretKeys.replicationPasswordKey $) -}}
- {{- else -}}
- {{- "replication-password" -}}
- {{- end -}}
- {{- else -}}
- {{- "replication-password" -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Get the admin-password key.
- */}}
- {{- define "postgresql.v1.adminPasswordKey" -}}
- {{- if or .Values.global.postgresql.auth.existingSecret .Values.auth.existingSecret -}}
- {{- if .Values.global.postgresql.auth.secretKeys.adminPasswordKey -}}
- {{- printf "%s" (tpl .Values.global.postgresql.auth.secretKeys.adminPasswordKey $) -}}
- {{- else if .Values.auth.secretKeys.adminPasswordKey -}}
- {{- printf "%s" (tpl .Values.auth.secretKeys.adminPasswordKey $) -}}
- {{- end -}}
- {{- else -}}
- {{- "postgres-password" -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Get the user-password key.
- */}}
- {{- define "postgresql.v1.userPasswordKey" -}}
- {{- if or .Values.global.postgresql.auth.existingSecret .Values.auth.existingSecret -}}
- {{- if or (empty (include "postgresql.v1.username" .)) (eq (include "postgresql.v1.username" .) "postgres") -}}
- {{- printf "%s" (include "postgresql.v1.adminPasswordKey" .) -}}
- {{- else -}}
- {{- if .Values.global.postgresql.auth.secretKeys.userPasswordKey -}}
- {{- printf "%s" (tpl .Values.global.postgresql.auth.secretKeys.userPasswordKey $) -}}
- {{- else if .Values.auth.secretKeys.userPasswordKey -}}
- {{- printf "%s" (tpl .Values.auth.secretKeys.userPasswordKey $) -}}
- {{- end -}}
- {{- end -}}
- {{- else -}}
- {{- "password" -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Return true if a secret object should be created
- */}}
- {{- define "postgresql.v1.createSecret" -}}
- {{- $customUser := include "postgresql.v1.username" . -}}
- {{- $postgresPassword := include "common.secrets.lookup" (dict "secret" (include "common.names.fullname" .) "key" .Values.auth.secretKeys.adminPasswordKey "defaultValue" (ternary (coalesce .Values.global.postgresql.auth.postgresPassword .Values.auth.postgresPassword .Values.global.postgresql.auth.password .Values.auth.password) (coalesce .Values.global.postgresql.auth.postgresPassword .Values.auth.postgresPassword) (or (empty $customUser) (eq $customUser "postgres"))) "context" $) -}}
- {{- if and (not (or .Values.global.postgresql.auth.existingSecret .Values.auth.existingSecret)) (or $postgresPassword .Values.auth.enablePostgresUser (and (not (empty $customUser)) (ne $customUser "postgres")) (eq .Values.architecture "replication") (and .Values.ldap.enabled (or .Values.ldap.bind_password .Values.ldap.bindpw))) -}}
- {{- true -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Return PostgreSQL service port
- */}}
- {{- define "postgresql.v1.service.port" -}}
- {{- if .Values.global.postgresql.service.ports.postgresql -}}
- {{- .Values.global.postgresql.service.ports.postgresql -}}
- {{- else -}}
- {{- .Values.primary.service.ports.postgresql -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Return PostgreSQL service port
- */}}
- {{- define "postgresql.v1.readReplica.service.port" -}}
- {{- if .Values.global.postgresql.service.ports.postgresql -}}
- {{- .Values.global.postgresql.service.ports.postgresql -}}
- {{- else -}}
- {{- .Values.readReplicas.service.ports.postgresql -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Get the PostgreSQL primary configuration ConfigMap name.
- */}}
- {{- define "postgresql.v1.primary.configmapName" -}}
- {{- if .Values.primary.existingConfigmap -}}
- {{- printf "%s" (tpl .Values.primary.existingConfigmap $) -}}
- {{- else -}}
- {{- printf "%s-configuration" (include "postgresql.v1.primary.fullname" .) -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Return true if a configmap object should be created for PostgreSQL primary with the configuration
- */}}
- {{- define "postgresql.v1.primary.createConfigmap" -}}
- {{- if and (or .Values.primary.configuration .Values.primary.pgHbaConfiguration) (not .Values.primary.existingConfigmap) -}}
- {{- true -}}
- {{- else -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Get the PostgreSQL primary extended configuration ConfigMap name.
- */}}
- {{- define "postgresql.v1.primary.extendedConfigmapName" -}}
- {{- if .Values.primary.existingExtendedConfigmap -}}
- {{- printf "%s" (tpl .Values.primary.existingExtendedConfigmap $) -}}
- {{- else -}}
- {{- printf "%s-extended-configuration" (include "postgresql.v1.primary.fullname" .) -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Get the PostgreSQL read replica extended configuration ConfigMap name.
- */}}
- {{- define "postgresql.v1.readReplicas.extendedConfigmapName" -}}
- {{- printf "%s-extended-configuration" (include "postgresql.v1.readReplica.fullname" .) -}}
- {{- end -}}
- {{/*
- Return true if a configmap object should be created for PostgreSQL primary with the extended configuration
- */}}
- {{- define "postgresql.v1.primary.createExtendedConfigmap" -}}
- {{- if and .Values.primary.extendedConfiguration (not .Values.primary.existingExtendedConfigmap) -}}
- {{- true -}}
- {{- else -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Return true if a configmap object should be created for PostgreSQL read replica with the extended configuration
- */}}
- {{- define "postgresql.v1.readReplicas.createExtendedConfigmap" -}}
- {{- if .Values.readReplicas.extendedConfiguration -}}
- {{- true -}}
- {{- else -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Create the name of the service account to use
- */}}
- {{- define "postgresql.v1.serviceAccountName" -}}
- {{- if .Values.serviceAccount.create -}}
- {{ default (include "common.names.fullname" .) .Values.serviceAccount.name }}
- {{- else -}}
- {{ default "default" .Values.serviceAccount.name }}
- {{- end -}}
- {{- end -}}
- {{/*
- Return true if a configmap should be mounted with PostgreSQL configuration
- */}}
- {{- define "postgresql.v1.mountConfigurationCM" -}}
- {{- if or .Values.primary.configuration .Values.primary.pgHbaConfiguration .Values.primary.existingConfigmap -}}
- {{- true -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Get the initialization scripts ConfigMap name.
- */}}
- {{- define "postgresql.v1.initdb.scriptsCM" -}}
- {{- if .Values.primary.initdb.scriptsConfigMap -}}
- {{- printf "%s" (tpl .Values.primary.initdb.scriptsConfigMap $) -}}
- {{- else -}}
- {{- printf "%s-init-scripts" (include "postgresql.v1.primary.fullname" .) -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Return true if TLS is enabled for LDAP connection
- */}}
- {{- define "postgresql.v1.ldap.tls.enabled" -}}
- {{- if and (kindIs "string" .Values.ldap.tls) (not (empty .Values.ldap.tls)) -}}
- {{- true -}}
- {{- else if and (kindIs "map" .Values.ldap.tls) .Values.ldap.tls.enabled -}}
- {{- true -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Get the readiness probe command
- */}}
- {{- define "postgresql.v1.readinessProbeCommand" -}}
- {{- $customUser := include "postgresql.v1.username" . -}}
- - |
- {{- if (include "postgresql.v1.database" .) }}
- exec pg_isready -U {{ default "postgres" $customUser | quote }} -d "dbname={{ include "postgresql.v1.database" . }} {{- if .Values.tls.enabled }} sslcert={{ include "postgresql.v1.tlsCert" . }} sslkey={{ include "postgresql.v1.tlsCertKey" . }}{{- end }}" -h 127.0.0.1 -p {{ .Values.containerPorts.postgresql }}
- {{- else }}
- exec pg_isready -U {{ default "postgres" $customUser | quote }} {{- if .Values.tls.enabled }} -d "sslcert={{ include "postgresql.v1.tlsCert" . }} sslkey={{ include "postgresql.v1.tlsCertKey" . }}"{{- end }} -h 127.0.0.1 -p {{ .Values.containerPorts.postgresql }}
- {{- end }}
- {{- if contains "bitnami/" .Values.image.repository }}
- [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f /bitnami/postgresql/.initialized ]
- {{- end }}
- {{- end -}}
- {{/*
- Compile all warnings into a single message, and call fail.
- */}}
- {{- define "postgresql.v1.validateValues" -}}
- {{- $messages := list -}}
- {{- $messages := append $messages (include "postgresql.v1.validateValues.ldapConfigurationMethod" .) -}}
- {{- $messages := append $messages (include "postgresql.v1.validateValues.psp" .) -}}
- {{- $messages := without $messages "" -}}
- {{- $message := join "\n" $messages -}}
- {{- if $message -}}
- {{- printf "\nVALUES VALIDATION:\n%s" $message | fail -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Validate values of Postgresql - If ldap.url is used then you don't need the other settings for ldap
- */}}
- {{- define "postgresql.v1.validateValues.ldapConfigurationMethod" -}}
- {{- if and .Values.ldap.enabled (and (not (empty .Values.ldap.url)) (not (empty .Values.ldap.server))) -}}
- postgresql: ldap.url, ldap.server
- You cannot set both `ldap.url` and `ldap.server` at the same time.
- Please provide a unique way to configure LDAP.
- More info at https://www.postgresql.org/docs/current/auth-ldap.html
- {{- end -}}
- {{- end -}}
- {{/*
- Validate values of Postgresql - If PSP is enabled RBAC should be enabled too
- */}}
- {{- define "postgresql.v1.validateValues.psp" -}}
- {{- if and .Values.psp.create (not .Values.rbac.create) -}}
- postgresql: psp.create, rbac.create
- RBAC should be enabled if PSP is enabled in order for PSP to work.
- More info at https://kubernetes.io/docs/concepts/policy/pod-security-policy/#authorizing-policies
- {{- end -}}
- {{- end -}}
- {{/*
- Return the path to the cert file.
- */}}
- {{- define "postgresql.v1.tlsCert" -}}
- {{- if .Values.tls.autoGenerated -}}
- {{- printf "/opt/bitnami/postgresql/certs/tls.crt" -}}
- {{- else -}}
- {{- required "Certificate filename is required when TLS in enabled" .Values.tls.certFilename | printf "/opt/bitnami/postgresql/certs/%s" -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Return the path to the cert key file.
- */}}
- {{- define "postgresql.v1.tlsCertKey" -}}
- {{- if .Values.tls.autoGenerated -}}
- {{- printf "/opt/bitnami/postgresql/certs/tls.key" -}}
- {{- else -}}
- {{- required "Certificate Key filename is required when TLS in enabled" .Values.tls.certKeyFilename | printf "/opt/bitnami/postgresql/certs/%s" -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Return the path to the CA cert file.
- */}}
- {{- define "postgresql.v1.tlsCACert" -}}
- {{- if .Values.tls.autoGenerated -}}
- {{- printf "/opt/bitnami/postgresql/certs/ca.crt" -}}
- {{- else -}}
- {{- printf "/opt/bitnami/postgresql/certs/%s" .Values.tls.certCAFilename -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Return the path to the CRL file.
- */}}
- {{- define "postgresql.v1.tlsCRL" -}}
- {{- if .Values.tls.crlFilename -}}
- {{- printf "/opt/bitnami/postgresql/certs/%s" .Values.tls.crlFilename -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Return true if a TLS credentials secret object should be created
- */}}
- {{- define "postgresql.v1.createTlsSecret" -}}
- {{- if and .Values.tls.autoGenerated (not .Values.tls.certificatesSecret) -}}
- {{- true -}}
- {{- end -}}
- {{- end -}}
- {{/*
- Return the path to the CA cert file.
- */}}
- {{- define "postgresql.v1.tlsSecretName" -}}
- {{- if .Values.tls.autoGenerated -}}
- {{- printf "%s-crt" (include "common.names.fullname" .) -}}
- {{- else -}}
- {{ required "A secret containing TLS certificates is required when TLS is enabled" .Values.tls.certificatesSecret }}
- {{- end -}}
- {{- end -}}
|