2 # Copyright © 2018 Amdocs, AT&T, Bell Canada
3 # Copyright © 2020 Samsung Electronics
4 # Copyright © 2021 Orange
5 # Modifications Copyright (C) 2021 Bell Canada.
7 # # Licensed under the Apache License, Version 2.0 (the "License");
8 # # you may not use this file except in compliance with the License.
9 # # You may obtain a copy of the License at
11 # # http://www.apache.org/licenses/LICENSE-2.0
13 # # Unless required by applicable law or agreed to in writing, software
14 # # distributed under the License is distributed on an "AS IS" BASIS,
15 # # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # # See the License for the specific language governing permissions and
17 # # limitations under the License.
20 {{- define "common.postgres.deployment" -}}
22 {{- $pgMode := .pgMode }}
26 name: {{ include "common.fullname" $dot }}-{{ $pgMode }}
27 namespace: {{ include "common.namespace" $dot }}
29 app: {{ include "common.name" $dot }}-{{ $pgMode }}
30 app.kubernetes.io/name: {{ include "common.name" $dot }}-{{ $pgMode }}
31 {{- if $dot.Chart.AppVersion }}
32 version: "{{ $dot.Chart.AppVersion | replace "+" "_" }}"
34 version: "{{ $dot.Chart.Version | replace "+" "_" }}"
36 chart: {{ $dot.Chart.Name }}-{{ $dot.Chart.Version | replace "+" "_" }}
37 release: {{ include "common.release" $dot }}
38 heritage: {{ $dot.Release.Service }}
39 name: "{{ index $dot.Values "container" "name" $pgMode }}"
46 app: {{ include "common.name" $dot }}-{{ $pgMode }}
50 app: {{ include "common.name" $dot }}-{{ $pgMode }}
51 app.kubernetes.io/name: {{ include "common.name" $dot }}-{{ $pgMode }}
52 {{- if $dot.Chart.AppVersion }}
53 version: "{{ $dot.Chart.AppVersion | replace "+" "_" }}"
55 version: "{{ $dot.Chart.Version | replace "+" "_" }}"
57 release: {{ include "common.release" $dot }}
58 name: "{{ index $dot.Values "container" "name" $pgMode }}"
60 {{- include "common.imagePullSecrets" $dot | nindent 6 }}
67 function prepare_password {
68 echo -n $1 | sed -e "s/'/''/g"
70 export PG_PRIMARY_PASSWORD=`prepare_password $PG_PRIMARY_PASSWORD_INPUT`;
71 export PG_PASSWORD=`prepare_password $PG_PASSWORD_INPUT`;
72 export PG_ROOT_PASSWORD=`prepare_password $PG_ROOT_PASSWORD_INPUT`;
73 cd /config-input && for PFILE in `ls -1 .`; do envsubst <${PFILE} >/config/${PFILE}; done
75 - name: PG_PRIMARY_USER
79 - name: PG_PRIMARY_PASSWORD_INPUT
80 {{- include "common.secret.envFromSecretFast" (dict "global" $dot "uid" (include "common.postgres.secret.primaryPasswordUID" .) "key" "password") | indent 10 }}
82 {{- include "common.secret.envFromSecretFast" (dict "global" $dot "uid" (include "common.postgres.secret.userCredentialsUID" .) "key" "login") | indent 10 }}
83 - name: PG_PASSWORD_INPUT
84 {{- include "common.secret.envFromSecretFast" (dict "global" $dot "uid" (include "common.postgres.secret.userCredentialsUID" .) "key" "password") | indent 10 }}
86 value: "{{ $dot.Values.config.pgDatabase }}"
87 - name: PG_ROOT_PASSWORD_INPUT
88 {{- include "common.secret.envFromSecretFast" (dict "global" $dot "uid" (include "common.postgres.secret.rootPassUID" .) "key" "password") | indent 10 }}
90 - mountPath: /config-input/setup.sql
95 image: {{ include "repositoryGenerator.image.envsubst" $dot }}
96 imagePullPolicy: {{ $dot.Values.global.pullPolicy | default $dot.Values.pullPolicy }}
97 name: {{ include "common.name" $dot }}-update-config
104 chown 26:26 /podroot/;
106 image: {{ include "repositoryGenerator.image.busybox" $dot }}
107 imagePullPolicy: {{ $dot.Values.global.pullPolicy | default $dot.Values.pullPolicy }}
109 - name: {{ include "common.fullname" $dot }}-data
112 - name: {{ include "common.name" $dot }}
113 image: {{ include "repositoryGenerator.image.postgres" $dot }}
114 imagePullPolicy: {{ $dot.Values.global.pullPolicy | default $dot.Values.pullPolicy }}
116 - containerPort: {{ $dot.Values.service.internalPort }}
117 name: {{ $dot.Values.service.portName }}
118 # disable liveness probe when breakpoints set in debugger
119 # so K8s doesn't restart unresponsive container
120 {{- if eq $dot.Values.liveness.enabled true }}
123 port: {{ $dot.Values.service.internalPort }}
124 initialDelaySeconds: {{ $dot.Values.liveness.initialDelaySeconds }}
125 periodSeconds: {{ $dot.Values.liveness.periodSeconds }}
126 timeoutSeconds: {{ $dot.Values.liveness.timeoutSeconds }}
130 port: {{ $dot.Values.service.internalPort }}
131 initialDelaySeconds: {{ $dot.Values.readiness.initialDelaySeconds }}
132 periodSeconds: {{ $dot.Values.readiness.periodSeconds }}
136 - name: PG_PRIMARY_USER
142 - name: PG_PRIMARY_HOST
143 value: "{{ $dot.Values.service.name2 }}"
144 - name: PG_REPLICA_HOST
145 value: "{{ $dot.Values.service.name3 }}"
146 - name: PG_PRIMARY_PORT
147 value: "{{ $dot.Values.service.internalPort }}"
148 - name: PG_PRIMARY_PASSWORD
149 {{- include "common.secret.envFromSecretFast" (dict "global" $dot "uid" (include "common.postgres.secret.primaryPasswordUID" .) "key" "password") | indent 10 }}
151 {{- include "common.secret.envFromSecretFast" (dict "global" $dot "uid" (include "common.postgres.secret.userCredentialsUID" .) "key" "login") | indent 10 }}
153 {{- include "common.secret.envFromSecretFast" (dict "global" $dot "uid" (include "common.postgres.secret.userCredentialsUID" .) "key" "password") | indent 10 }}
155 value: "{{ $dot.Values.config.pgDatabase }}"
156 - name: PG_ROOT_PASSWORD
157 {{- include "common.secret.envFromSecretFast" (dict "global" $dot "uid" (include "common.postgres.secret.rootPassUID" .) "key" "password") | indent 10 }}
158 - name: PGDATA_PATH_OVERRIDE
159 value: "{{ $dot.Values.config.pgDataPath }}"
162 mountPath: /pgconf/pool_hba.conf
163 subPath: pool_hba.conf
165 mountPath: /pgconf/setup.sql
168 name: {{ include "common.fullname" $dot }}-data
170 name: {{ include "common.fullname" $dot }}-backup
172 resources: {{ include "common.resources" $dot | nindent 10 }}
173 {{- if (default false $dot.Values.metrics.enabled) }}
174 - name: {{ include "common.name" $dot }}-metrics
175 image: {{ include "repositoryGenerator.dockerHubRepository" . }}/{{ $dot.Values.metrics.image }}
176 imagePullPolicy: {{ $dot.Values.global.pullPolicy | default $dot.Values.metrics.pullPolicy | quote}}
178 - name: POSTGRES_METRICS_EXTRA_FLAGS
179 value: {{ default "" (join " " $dot.Values.metrics.extraFlags) | quote }}
180 - name: DATA_SOURCE_USER
181 value: "{{ $dot.Values.metrics.postgresUser }}"
182 - name: DATA_SOURCE_PASS
183 {{- include "common.secret.envFromSecretFast" (dict "global" $dot "uid" (include "common.postgres.secret.rootPassUID" .) "key" "password") | indent 12 }}
188 DATA_SOURCE_URI="127.0.0.1:5432/?sslmode=disable" ./bin/postgres_exporter $POSTGRES_METRICS_EXTRA_FLAGS
190 {{- range $index, $metricPort := $dot.Values.metrics.ports }}
191 - name: {{ $metricPort.name }}
192 containerPort: {{ $metricPort.port }}
199 initialDelaySeconds: {{ $dot.Values.metrics.livenessProbe.initialDelaySeconds }}
200 periodSeconds: {{ $dot.Values.metrics.livenessProbe.periodSeconds }}
201 timeoutSeconds: {{ $dot.Values.metrics.livenessProbe.timeoutSeconds }}
202 successThreshold: {{ $dot.Values.metrics.livenessProbe.successThreshold }}
203 failureThreshold: {{ $dot.Values.metrics.livenessProbe.failureThreshold }}
208 initialDelaySeconds: {{ $dot.Values.metrics.readinessProbe.initialDelaySeconds }}
209 periodSeconds: {{ $dot.Values.metrics.readinessProbe.periodSeconds }}
210 timeoutSeconds: {{ $dot.Values.metrics.readinessProbe.timeoutSeconds }}
211 successThreshold: {{ $dot.Values.metrics.readinessProbe.successThreshold }}
212 failureThreshold: {{ $dot.Values.metrics.readinessProbe.failureThreshold }}
213 {{ include "common.containerSecurityContext" $dot | indent 10 | trim }}
214 resources: {{- toYaml $dot.Values.metrics.resources | nindent 12 }}
216 {{- if $dot.Values.nodeSelector }}
218 {{ toYaml $dot.Values.nodeSelector | indent 10 }}
220 {{- if $dot.Values.affinity }}
222 {{ toYaml $dot.Values.affinity | indent 10 }}
228 - name: {{ include "common.fullname" $dot }}-backup
230 - name: {{ include "common.fullname" $dot }}-data
231 {{- if $dot.Values.persistence.enabled }}
232 persistentVolumeClaim:
233 claimName: {{ include "common.fullname" $dot }}-{{ $pgMode }}
239 name: {{ include "common.fullname" $dot }}