Files
mongodb/mongodb-sharded/templates/_helpers.tpl
2026-04-16 17:59:10 +02:00

323 lines
14 KiB
Smarty

{{/*
Copyright Broadcom, Inc. All Rights Reserved.
SPDX-License-Identifier: APACHE-2.0
*/}}
{{/* vim: set filetype=mustache: */}}
{{/*
Returns a ServiceAccount name for specified path or falls back to `common.serviceAccount.name`
if `common.serviceAccount.create` is set to true. Falls back to Chart's fullname otherwise.
Usage:
{{ include "mongodb-sharded.serviceAccountName" (dict "component" "mongos" "value" .Values.path.to.serviceAccount "context" $) }}
*/}}
{{- define "mongodb-sharded.serviceAccountName" -}}
{{- if .value.create }}
{{- default (printf "%s-%s" (include "common.names.fullname" .context) .component) .value.name | quote }}
{{- else if .context.Values.common.serviceAccount.create }}
{{- default (printf "%s-%s" (include "common.names.fullname" .context) .component) .context.Values.common.serviceAccount.name | quote }}
{{- else -}}
{{- default "default" .value.name | quote }}
{{- end }}
{{- end }}
{{- define "mongodb-sharded.secret" -}}
{{- if .Values.auth.existingSecret -}}
{{- printf "%s" (tpl .Values.auth.existingSecret $) -}}
{{- else }}
{{- include "common.names.fullname" . -}}
{{- end }}
{{- end -}}
{{- define "mongodb-sharded.configServer.primaryHost" -}}
{{- if .Values.configsvr.external.host -}}
{{- .Values.configsvr.external.host }}
{{- else -}}
{{- printf "%s-configsvr-0.%s-headless.%s.svc.%s" (include "common.names.fullname" . ) (include "common.names.fullname" .) (include "common.names.namespace" .) .Values.clusterDomain -}}
{{- end -}}
{{- end -}}
{{- define "mongodb-sharded.configServer.rsName" -}}
{{- if .Values.configsvr.external.replicasetName -}}
{{- .Values.configsvr.external.replicasetName }}
{{- else }}
{{- printf "%s-configsvr" ( include "common.names.fullname" . ) -}}
{{- end }}
{{- end -}}
{{- define "mongodb-sharded.mongos.configCM" -}}
{{- if .Values.mongos.configCM -}}
{{- .Values.mongos.configCM -}}
{{- else }}
{{- printf "%s-mongos" (include "common.names.fullname" .) -}}
{{- end }}
{{- end -}}
{{- define "mongodb-sharded.shardsvr.dataNode.configCM" -}}
{{- if .Values.shardsvr.dataNode.configCM -}}
{{- .Values.shardsvr.dataNode.configCM -}}
{{- else }}
{{- printf "%s-shardsvr-data" (include "common.names.fullname" .) -}}
{{- end }}
{{- end -}}
{{- define "mongodb-sharded.shardsvr.arbiter.configCM" -}}
{{- if .Values.shardsvr.arbiter.configCM -}}
{{- .Values.shardsvr.arbiter.configCM -}}
{{- else }}
{{- printf "%s-shardsvr-arbiter" (include "common.names.fullname" .) -}}
{{- end }}
{{- end -}}
{{- define "mongodb-sharded.configsvr.configCM" -}}
{{- if .Values.configsvr.configCM -}}
{{- .Values.configsvr.configCM -}}
{{- else }}
{{- printf "%s-configsvr" (include "common.names.fullname" .) -}}
{{- end }}
{{- end -}}
{{/*
Get the initialization scripts Secret name.
*/}}
{{- define "mongodb-sharded.initScriptsSecret" -}}
{{- printf "%s" (include "common.tplvalues.render" (dict "value" .Values.common.initScriptsSecret "context" $)) -}}
{{- end -}}
{{/*
Get the initialization scripts configmap name.
*/}}
{{- define "mongodb-sharded.initScriptsCM" -}}
{{- printf "%s" (include "common.tplvalues.render" (dict "value" .Values.common.initScriptsCM "context" $)) -}}
{{- end -}}
{{/*
Returns the proper Service name depending if an explicit service name is set
in the values file. If the name is not explicitly set it will take the "common.names.fullname"
*/}}
{{- define "mongodb-sharded.serviceName" -}}
{{- if .Values.service.name -}}
{{ .Values.service.name }}
{{- else -}}
{{ include "common.names.fullname" . }}
{{- end -}}
{{- end -}}
{{/*
Return the proper MongoDB® image name
*/}}
{{- define "mongodb-sharded.image" -}}
{{ include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) }}
{{- end -}}
{{/*
Return the proper image name (for the metrics image)
*/}}
{{- define "mongodb-sharded.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 "mongodb-sharded.volumePermissions.image" -}}
{{ include "common.images.image" (dict "imageRoot" .Values.volumePermissions.image "global" .Values.global) }}
{{- end -}}
{{/*
Return the proper Docker Image Registry Secret Names
*/}}
{{- define "mongodb-sharded.imagePullSecrets" -}}
{{- include "common.images.pullSecrets" (dict "images" (list .Values.image .Values.metrics.image .Values.volumePermissions.image) "global" .Values.global) -}}
{{- end -}}
{{/*
Compile all warnings into a single message, and call fail.
*/}}
{{- define "mongodb-sharded.validateValues" -}}
{{- $messages := list -}}
{{- $messages := append $messages (include "mongodb-sharded.validateValues.externalCfgServer" .) -}}
{{- $messages := append $messages (include "mongodb-sharded.validateValues.replicaCount" .) -}}
{{- $messages := append $messages (include "mongodb-sharded.validateValues.clusterIPListLength" .) -}}
{{- $messages := append $messages (include "mongodb-sharded.validateValues.nodePortListLength" .) -}}
{{- $messages := append $messages (include "mongodb-sharded.validateValues.loadBalancerIPListLength" .) -}}
{{- $messages := append $messages (include "mongodb-sharded.validateValues.config" .) -}}
{{- $messages := without $messages "" -}}
{{- $message := join "\n" $messages -}}
{{- if $message -}}
{{- printf "\nVALUES VALIDATION:\n%s" $message | fail -}}
{{- end -}}
{{- end -}}
{{/*
Validate values of MongoDB® - If using an external config server, then both the host and the replicaset name should be set.
*/}}
{{- define "mongodb-sharded.validateValues.externalCfgServer" -}}
{{- if and .Values.configsvr.external.replicasetName (not .Values.configsvr.external.host) -}}
mongodb: invalidExternalConfigServer
You specified a replica set name for the external config server but not a host. Set both configsvr.external.replicasetName and configsvr.external.host
{{- end -}}
{{- if and (not .Values.configsvr.external.replicasetName) .Values.configsvr.external.host -}}
mongodb: invalidExternalConfigServer
You specified a host for the external config server but not the replica set name. Set both configsvr.external.replicasetName and configsvr.external.host
{{- end -}}
{{- if and .Values.configsvr.external.host (not .Values.configsvr.external.rootPassword) -}}
mongodb: invalidExternalConfigServer
You specified a host for the external config server but not the root password. Set the configsvr.external.rootPassword value.
{{- end -}}
{{- if and .Values.configsvr.external.host (not .Values.configsvr.external.replicasetKey) -}}
mongodb: invalidExternalConfigServer
You specified a host for the external config server but not the replica set key. Set the configsvr.external.replicasetKey value.
{{- end -}}
{{- end -}}
{{/*
Validate values of MongoDB® - The number of shards must be positive, as well as the data node replicaCount
*/}}
{{- define "mongodb-sharded.validateValues.replicaCount" -}}
{{- if and (le (int .Values.shardsvr.dataNode.replicaCount) 0) (ge (int .Values.shards) 1) }}
mongodb: invalidShardSvrReplicas
You specified an invalid number of replicas per shard. Please set shardsvr.dataNode.replicaCount with a positive number or set the number of shards to 0.
{{- end -}}
{{- if lt (int .Values.shardsvr.arbiter.replicaCount) 0 }}
mongodb: invalidShardSvrArbiters
You specified an invalid number of arbiters per shard. Please set shardsvr.arbiter.replicaCount with a number greater or equal than 0
{{- end -}}
{{- if and (le (int .Values.configsvr.replicaCount) 0) (not .Values.configsvr.external.host) }}
mongodb: invalidConfigSvrReplicas
You specified an invalid number of replicas per shard. Please set configsvr.replicaCount with a positive number or set the configsvr.external.host value to use
an external config server replicaset
{{- end -}}
{{- end -}}
{{/*
Validate values of MongoDB® - Cannot use both .config and .configCM
*/}}
{{- define "mongodb-sharded.validateValues.config" -}}
{{- if and .Values.shardsvr.dataNode.configCM .Values.shardsvr.dataNode.config }}
mongodb: shardDataNodeConflictingConfig
You specified both shardsvr.dataNode.configCM and shardsvr.dataNode.config. You can only set one
{{- end -}}
{{- if and .Values.shardsvr.arbiter.configCM .Values.shardsvr.arbiter.config }}
mongodb: arbiterNodeConflictingConfig
You specified both shardsvr.arbiter.configCM and shardsvr.arbiter.config. You can only set one
{{- end -}}
{{- if and .Values.mongos.configCM .Values.mongos.config }}
mongodb: mongosNodeConflictingConfig
You specified both mongos.configCM and mongos.config. You can only set one
{{- end -}}
{{- if and .Values.configsvr.configCM .Values.configsvr.config }}
mongodb: configSvrNodeConflictingConfig
You specified both configsvr.configCM and configsvr.config. You can only set one
{{- end -}}
{{- end -}}
{{/* Validate values of MongoDB® - number of replicas must be the same as NodePort list */}}
{{- define "mongodb-sharded.validateValues.nodePortListLength" -}}
{{- $replicaCount := int .Values.mongos.replicaCount }}
{{- $nodePortListLength := len .Values.mongos.servicePerReplica.nodePorts }}
{{- if and .Values.mongos.useStatefulSet .Values.mongos.servicePerReplica.enabled (not (eq $replicaCount $nodePortListLength )) (eq .Values.mongos.servicePerReplica.type "NodePort") -}}
mongodb: .Values.mongos.servicePerReplica.nodePorts
Number of mongos.replicaCount and mongos.servicePerReplica.nodePorts array length must be the same. Currently: replicaCount = {{ $replicaCount }} and nodePorts = {{ $nodePortListLength }}
{{- end -}}
{{- end -}}
{{/* Validate values of MongoDB® - number of replicas must be the same as clusterIP list */}}
{{- define "mongodb-sharded.validateValues.clusterIPListLength" -}}
{{- $replicaCount := int .Values.mongos.replicaCount }}
{{- $clusterIPListLength := len .Values.mongos.servicePerReplica.clusterIPs }}
{{- if and (gt $clusterIPListLength 0) .Values.mongos.useStatefulSet .Values.mongos.servicePerReplica.enabled (not (eq $replicaCount $clusterIPListLength )) (eq .Values.mongos.servicePerReplica.type "ClusterIP") -}}
mongodb: .Values.mongos.servicePerReplica.clusterIPs
Number of mongos.replicaCount and mongos.servicePerReplica.clusterIPs array length must be the same. Currently: replicaCount = {{ $replicaCount }} and clusterIPs = {{ $clusterIPListLength }}
{{- end -}}
{{- end -}}
{{/* Validate values of MongoDB® - number of replicas must be the same as loadBalancerIP list */}}
{{- define "mongodb-sharded.validateValues.loadBalancerIPListLength" -}}
{{- $replicaCount := int .Values.mongos.replicaCount }}
{{- $loadBalancerIPListLength := len .Values.mongos.servicePerReplica.loadBalancerIPs }}
{{- if and (gt $loadBalancerIPListLength 0) .Values.mongos.useStatefulSet .Values.mongos.servicePerReplica.enabled (not (eq $replicaCount $loadBalancerIPListLength )) (eq .Values.mongos.servicePerReplica.type "LoadBalancer") -}}
mongodb: .Values.mongos.servicePerReplica.loadBalancerIPs
Number of mongos.replicaCount and mongos.servicePerReplica.loadBalancerIPs array length must be the same. Currently: replicaCount = {{ $replicaCount }} and loadBalancerIPs = {{ $loadBalancerIPListLength }}
{{- end -}}
{{- end -}}
{{/* Check if there are rolling tags in the images */}}
{{- define "mongodb-sharded.checkRollingTags" -}}
{{- include "common.warnings.rollingTag" .Values.image }}
{{- include "common.warnings.rollingTag" .Values.metrics.image }}
{{- include "common.warnings.rollingTag" .Values.volumePermissions.image }}
{{- end -}}
{{/* Customizations */}}\
{{/* Redirect logs to stdout */}}
{{- define "mongodb-sharded.initContainer.logDir" -}}
- name: log-dir
image: {{ include "mongodb-sharded.image" $ }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- /bin/bash
args:
- -ec
- |
ln -sf /dev/stdout "/opt/bitnami/mongodb/logs/mongodb.log"
volumeMounts:
- name: empty-dir
mountPath: /opt/bitnami/mongodb/logs
subPath: app-logs-dir
{{- end }}
{{/* Percona PMM client container definition*/}}
{{- define "mongodb-sharded.pmmClientContainer" -}}
- name: pmm-client
image: {{ .Values.pmmMetrics.image.repository }}:{{ .Values.pmmMetrics.image.tag }}
env:
- name: PMM_AGENT_SERVER_ADDRESS
value: {{ .Values.pmmMetrics.pmm_agent_server_address | quote }}
- name: PMM_AGENT_SERVER_INSECURE_TLS
value: {{ .Values.pmmMetrics.pmm_agent_server_insecure_tls | quote }}
- name: PMM_AGENT_SERVER_USERNAME
valueFrom:
secretKeyRef:
name: mongodb-pmm-credentials
key: pmm-agent-server-username
- name: PMM_AGENT_SERVER_PASSWORD
valueFrom:
secretKeyRef:
name: mongodb-pmm-credentials
key: pmm-agent-server-password
- name: PMM_MONGODB_USERNAME
valueFrom:
secretKeyRef:
name: mongodb-pmm-credentials
key: pmm-mongodb-username
- name: PMM_MONGODB_PASSWORD
valueFrom:
secretKeyRef:
name: mongodb-pmm-credentials
key: pmm-mongodb-password
- name: PMM_AGENT_SETUP_FORCE
value: {{ .Values.pmmMetrics.pmm_agent_setup_force | quote }}
- name: PMM_AGENT_CONFIG_FILE
value: {{ .Values.pmmMetrics.pmm_agent_config_file | quote }}
- name: PMM_AGENT_PRERUN_SCRIPT
value: {{ .Values.pmmMetrics.pmm_agent_prerun_script | quote }}
startupProbe:
tcpSocket:
port: 27017
initialDelaySeconds: 50
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 30
readinessProbe:
tcpSocket:
port: 27017
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
{{- end }}