262 lines
10 KiB
Smarty
262 lines
10 KiB
Smarty
{{- define "tc.v1.common.class.cnpg.cluster" -}}
|
|
{{- $rootCtx := .rootCtx -}}
|
|
{{- $objectData := .objectData -}}
|
|
|
|
{{- $fullname := include "tc.v1.common.lib.chart.names.fullname" $rootCtx -}}
|
|
{{- include "tc.v1.common.lib.chart.names.validation" (dict "name" $objectData.clusterName "length" 253) -}}
|
|
{{- include "tc.v1.common.lib.metadata.validation" (dict "objectData" $objectData "caller" "CNPG Cluster") -}}
|
|
|
|
{{/* Initialize variables */}}
|
|
{{- $hibernation := "off" -}}
|
|
{{- $instances := 2 -}}
|
|
{{- $mode := "standalone" -}}
|
|
{{- $enableMonitoring := false -}}
|
|
{{- $disableDefaultQueries := false -}}
|
|
{{- $customQueries := list -}}
|
|
{{- $enableSuperUser := true -}}
|
|
{{- $inProgress := false -}}
|
|
{{- $reusePVC := true -}}
|
|
{{- $preloadLibraries := list -}}
|
|
{{- $walSize := $rootCtx.Values.global.fallbackDefaults.vctSize -}}
|
|
{{- $size := $rootCtx.Values.global.fallbackDefaults.vctSize -}}
|
|
{{- $primaryUpdateStrategy := "unsupervised" -}}
|
|
{{- $primaryUpdateMethod := "switchover" -}}
|
|
{{- $logLevel := "info" -}}
|
|
{{- $accessModes := $rootCtx.Values.global.fallbackDefaults.vctAccessModes -}}
|
|
{{- $walAccessModes := $rootCtx.Values.global.fallbackDefaults.vctAccessModes -}}
|
|
{{- $skipEmptyWalArchiveCheck := $rootCtx.Values.global.fallbackDefaults.cnpg.skipEmptyWalArchiveCheck -}}
|
|
|
|
{{/* Make sure keys exist before try to access any sub keys */}}
|
|
{{- if not (hasKey $objectData "cluster") -}}
|
|
{{- $_ := set $objectData "cluster" dict -}}
|
|
{{- end -}}
|
|
{{- if not (hasKey $objectData "monitoring") -}}
|
|
{{- $_ := set $objectData "monitoring" dict -}}
|
|
{{- end -}}
|
|
{{- if not (hasKey $objectData "backups") -}}
|
|
{{- $_ := set $objectData "backups" dict -}}
|
|
{{- end -}}
|
|
{{- if not (hasKey $objectData.cluster "storage") -}}
|
|
{{- $_ := set $objectData.cluster "storage" dict -}}
|
|
{{- end -}}
|
|
{{- if not (hasKey $objectData.cluster "walStorage") -}}
|
|
{{- $_ := set $objectData.cluster "walStorage" dict -}}
|
|
{{- end -}}
|
|
{{- if not (hasKey $objectData.cluster "resources") -}}
|
|
{{- $_ := set $objectData.cluster "resources" dict -}}
|
|
{{- end -}}
|
|
{{/* Exclude extra resources */}}
|
|
{{- $_ := set $objectData.cluster.resources "excludeExtra" true -}}
|
|
|
|
{{/* Metadata */}}
|
|
{{- $objLabels := $objectData.labels | default dict -}}
|
|
{{- $clusterLabels := $objectData.cluster.labels | default dict -}}
|
|
{{- $clusterLabels = mustMerge $clusterLabels $objLabels -}}
|
|
|
|
{{- $objAnnotations := $objectData.annotations | default dict -}}
|
|
{{- $clusterAnnotations := $objectData.cluster.annotations | default dict -}}
|
|
{{- $clusterAnnotations = mustMerge $clusterAnnotations $objAnnotations -}}
|
|
|
|
{{- with $objectData.cluster.instances -}}
|
|
{{- $instances = . -}}
|
|
{{- end -}}
|
|
|
|
{{/* Stop All */}}
|
|
{{- if or $objectData.hibernate (include "tc.v1.common.lib.util.stopAll" $rootCtx) -}}
|
|
{{- $hibernation = "on" -}}
|
|
{{- end -}}
|
|
|
|
{{/* General */}}
|
|
{{- with $objectData.mode -}}
|
|
{{- $mode = . -}}
|
|
{{- end -}}
|
|
|
|
{{- with $objectData.cluster.primaryUpdateStrategy -}}
|
|
{{- $primaryUpdateStrategy = . -}}
|
|
{{- end -}}
|
|
{{- with $objectData.cluster.primaryUpdateMethod -}}
|
|
{{- $primaryUpdateMethod = . -}}
|
|
{{- end -}}
|
|
{{- with $objectData.cluster.logLevel -}}
|
|
{{- $logLevel = . -}}
|
|
{{- end -}}
|
|
|
|
{{/* Monitoring */}}
|
|
{{- with $objectData.monitoring -}}
|
|
{{- if (kindIs "bool" .enablePodMonitor) -}}
|
|
{{- $enableMonitoring = .enablePodMonitor -}}
|
|
{{- end -}}
|
|
{{- if (kindIs "bool" .disableDefaultQueries) -}}
|
|
{{- $disableDefaultQueries = .disableDefaultQueries -}}
|
|
{{- end -}}
|
|
{{- with .customQueries -}}
|
|
{{- $customQueries = . -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Superuser */}}
|
|
{{- if (kindIs "bool" $objectData.cluster.enableSuperuserAccess) -}}
|
|
{{- $enableSuperUser = $objectData.cluster.enableSuperuserAccess -}}
|
|
{{- end -}}
|
|
|
|
{{/* Node Maintenance Window */}}
|
|
{{- if $objectData.cluster.singleNode -}}
|
|
{{- $inProgress = true -}}
|
|
{{- end -}}
|
|
|
|
{{- with $objectData.cluster.nodeMaintenanceWindow -}}
|
|
{{- if (kindIs "bool" .inProgress) -}}
|
|
{{ $inProgress = .inProgress -}}
|
|
{{- end -}}
|
|
{{- if (kindIs "bool" .reusePVC) -}}
|
|
{{ $reusePVC = .reusePVC -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Preload Libraries */}}
|
|
{{- if (kindIs "slice" $objectData.cluster.preloadLibraries) -}}
|
|
{{- $preloadLibraries = $objectData.cluster.preloadLibraries -}}
|
|
{{- end -}}
|
|
{{- if eq $objectData.type "timescaledb" -}}
|
|
{{- $preloadLibraries = mustAppend $preloadLibraries "timescaledb" -}}
|
|
{{- end -}}
|
|
{{- if eq $objectData.type "vectors" -}}
|
|
{{- $preloadLibraries = mustAppend $preloadLibraries "vectors.so" -}}
|
|
{{- end -}}
|
|
|
|
{{/* Storage */}}
|
|
{{- with $objectData.cluster.storage.size -}}
|
|
{{- $size = . -}}
|
|
{{- end -}}
|
|
|
|
{{- with $objectData.cluster.walStorage.size -}}
|
|
{{- $walSize = . -}}
|
|
{{- end -}}
|
|
|
|
{{- with $objectData.cluster.storage.accessModes -}}
|
|
{{- $accessModes = . -}}
|
|
{{- end -}}
|
|
|
|
{{- with $objectData.cluster.walStorage.accessModes -}}
|
|
{{- $walAccessModes = . -}}
|
|
{{- end -}}
|
|
|
|
{{- with $objectData.cluster.skipEmptyWalArchiveCheck -}}
|
|
{{- $skipEmptyWalArchiveCheck = . -}}
|
|
{{- end -}}
|
|
|
|
{{- $imageName := $objectData.cluster.imageName -}}
|
|
{{- if not $imageName -}}
|
|
{{/* Ensure version and container tracking */}}
|
|
{{- $imageType := ($objectData.type | default "postgres") | camelcase | title -}}
|
|
{{- if eq $imageType "Postgres" -}}
|
|
{{- $imageType = "" -}}
|
|
{{- end -}}
|
|
|
|
{{/* Format is [postgresCustomNameVersionImage] */}}
|
|
{{- $imageKey := printf "postgres%s%sImage" $imageType $objectData.pgVersion -}}
|
|
{{- $imageValue := fromJson (include "tc.v1.common.lib.container.imageSelector" (dict "rootCtx" $rootCtx "objectData" (dict "imageSelector" $imageKey))) -}}
|
|
{{- $formatImage := printf "%s:%s" $imageValue.repository $imageValue.tag -}}
|
|
|
|
{{- $imageName = $formatImage -}}
|
|
{{- end }}
|
|
|
|
---
|
|
apiVersion: postgresql.cnpg.io/v1
|
|
kind: Cluster
|
|
metadata:
|
|
name: {{ $objectData.clusterName }}
|
|
namespace: {{ include "tc.v1.common.lib.metadata.namespace" (dict "rootCtx" $rootCtx "objectData" $objectData "caller" "CNPG Cluster") }}
|
|
labels:
|
|
cnpg.io/reload: "on"
|
|
{{- $labels := (mustMerge $clusterLabels (include "tc.v1.common.lib.metadata.allLabels" $rootCtx | fromYaml)) -}}
|
|
{{- with (include "tc.v1.common.lib.metadata.render" (dict "rootCtx" $rootCtx "labels" $labels) | trim) }}
|
|
{{- . | nindent 4 }}
|
|
{{- end }}
|
|
annotations:
|
|
cnpg.io/hibernation: {{ $hibernation | quote }}
|
|
checksum/secrets: {{ toJson $rootCtx.Values.secret | sha256sum }}
|
|
{{- if $skipEmptyWalArchiveCheck }}
|
|
cnpg.io/skipEmptyWalArchiveCheck: "enabled"
|
|
{{- end }}
|
|
{{- $annotations := (mustMerge $clusterAnnotations (include "tc.v1.common.lib.metadata.allAnnotations" $rootCtx | fromYaml)) -}}
|
|
{{- with (include "tc.v1.common.lib.metadata.render" (dict "rootCtx" $rootCtx "annotations" $annotations) | trim) }}
|
|
{{- . | nindent 4 }}
|
|
{{- end }}
|
|
spec:
|
|
imageName: {{ $imageName }}
|
|
{{/* This ignores `0` on purpose. */}}
|
|
postgresUID: {{ $objectData.cluster.postgresUID | default 26 }}
|
|
postgresGID: {{ $objectData.cluster.postgresGID | default 26 }}
|
|
enableSuperuserAccess: {{ $enableSuperUser }}
|
|
primaryUpdateStrategy: {{ $primaryUpdateStrategy }}
|
|
primaryUpdateMethod: {{ $primaryUpdateMethod }}
|
|
logLevel: {{ $logLevel }}
|
|
instances: {{ $instances }}
|
|
{{- if or $objectData.cluster.postgresql $preloadLibraries }}
|
|
postgresql:
|
|
{{- with $objectData.cluster.postgresql }}
|
|
parameters:
|
|
{{- range $k, $v := . }}
|
|
{{ $k }}: {{ tpl $v $rootCtx | quote }}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- with $preloadLibraries }}
|
|
shared_preload_libraries:
|
|
{{- range $lib := (. | mustUniq) }}
|
|
- {{ $lib | quote }}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end }}
|
|
nodeMaintenanceWindow:
|
|
inProgress: {{ $inProgress }}
|
|
reusePVC: {{ $reusePVC }}
|
|
{{- with (include "tc.v1.common.lib.container.resources" (dict "rootCtx" $rootCtx "objectData" $objectData.cluster) | trim) }}
|
|
resources:
|
|
{{- . | nindent 4 }}
|
|
{{- end }}
|
|
storage:
|
|
pvcTemplate:
|
|
{{- $_ := set $objectData.cluster.storage "size" $size -}}
|
|
{{- $_ := set $objectData.cluster.storage "accessModes" $accessModes -}}
|
|
|
|
{{- include "tc.v1.common.lib.storage.pvc.spec" (dict "rootCtx" $rootCtx "objectData" $objectData.cluster.storage) | trim | nindent 6 }}
|
|
walStorage:
|
|
pvcTemplate:
|
|
{{- $_ := set $objectData.cluster.walStorage "size" $walSize -}}
|
|
{{- $_ := set $objectData.cluster.walStorage "accessModes" $walAccessModes -}}
|
|
|
|
{{- include "tc.v1.common.lib.storage.pvc.spec" (dict "rootCtx" $rootCtx "objectData" $objectData.cluster.walStorage) | trim | nindent 6 }}
|
|
{{- if $enableMonitoring }}
|
|
monitoring:
|
|
enablePodMonitor: {{ $enableMonitoring }}
|
|
disableDefaultQueries: {{ $disableDefaultQueries }}
|
|
{{- if $customQueries }}
|
|
customQueriesConfigMap:
|
|
{{- range $q := $customQueries }}
|
|
{{- $name := $q.name -}}
|
|
{{- $expandName := (include "tc.v1.common.lib.util.expandName" (dict
|
|
"rootCtx" $rootCtx "objectData" $q
|
|
"name" $q.name "caller" "CNPG Cluster"
|
|
"key" "monitoring.customQueries")) -}}
|
|
|
|
{{- if eq $expandName "true" -}}
|
|
{{- $name = (printf "%s-cnpg-%s-%s" $fullname $objectData.shortName $q.name) -}}
|
|
{{- end }}
|
|
- name: {{ $name }}
|
|
key: {{ $q.key | default "custom-queries" }}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end }}
|
|
bootstrap:
|
|
{{- if eq $mode "standalone" -}}
|
|
{{- include "tc.v1.common.lib.cnpg.cluster.bootstrap.standalone" (dict "rootCtx" $rootCtx "objectData" $objectData) | nindent 4 -}}
|
|
{{- else if eq $mode "recovery" -}}
|
|
{{- include "tc.v1.common.lib.cnpg.cluster.bootstrap.recovery" (dict "objectData" $objectData) | nindent 4 -}}
|
|
{{- include "tc.v1.common.lib.cnpg.cluster.bootstrap.recovery.externalCluster" (dict "rootCtx" $rootCtx "objectData" $objectData) | nindent 2 -}}
|
|
{{- end -}}
|
|
{{- if $objectData.backups.enabled }}
|
|
{{- include "tc.v1.common.lib.cnpg.cluster.backup" (dict "rootCtx" $rootCtx "objectData" $objectData) | nindent 2 -}}
|
|
{{- end -}}
|
|
{{- end -}}
|