{{/* 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 }}