Pushing mongod and mongoexpress integration
This commit is contained in:
		
							
								
								
									
										171
									
								
								opencloud/charts/mongodb/templates/NOTES.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								opencloud/charts/mongodb/templates/NOTES.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,171 @@
 | 
			
		||||
CHART NAME: {{ .Chart.Name }}
 | 
			
		||||
CHART VERSION: {{ .Chart.Version }}
 | 
			
		||||
APP VERSION: {{ .Chart.AppVersion }}
 | 
			
		||||
 | 
			
		||||
{{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
The chart has been deployed in diagnostic mode. All probes have been disabled and the command has been overwritten with:
 | 
			
		||||
 | 
			
		||||
  command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 4 }}
 | 
			
		||||
  args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 4 }}
 | 
			
		||||
 | 
			
		||||
Get the list of pods by executing:
 | 
			
		||||
 | 
			
		||||
  kubectl get pods --namespace {{ .Release.Namespace }} -l app.kubernetes.io/instance={{ .Release.Name }}
 | 
			
		||||
 | 
			
		||||
Access the pod you want to debug by executing
 | 
			
		||||
 | 
			
		||||
  kubectl exec --namespace {{ .Release.Namespace }} -ti <NAME OF THE POD> -- bash
 | 
			
		||||
 | 
			
		||||
In order to replicate the container startup scripts execute this command:
 | 
			
		||||
 | 
			
		||||
    /opt/bitnami/scripts/mongodb/entrypoint.sh /opt/bitnami/scripts/mongodb/run.sh
 | 
			
		||||
 | 
			
		||||
{{- else }}
 | 
			
		||||
 | 
			
		||||
{{- $replicaCount := int .Values.replicaCount }}
 | 
			
		||||
{{- $portNumber := int .Values.service.ports.mongodb }}
 | 
			
		||||
{{- $fullname := include "mongodb.fullname" . }}
 | 
			
		||||
{{- $releaseNamespace := include "mongodb.namespace" . }}
 | 
			
		||||
{{- $clusterDomain := .Values.clusterDomain }}
 | 
			
		||||
{{- $loadBalancerIPListLength := len .Values.externalAccess.service.loadBalancerIPs }}
 | 
			
		||||
{{- $mongoList := list }}
 | 
			
		||||
{{- range $e, $i := until $replicaCount }}
 | 
			
		||||
{{- $mongoList = append $mongoList (printf "%s-%d.%s-headless.%s.svc.%s:%d" $fullname $i $fullname $releaseNamespace $clusterDomain $portNumber) }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
 | 
			
		||||
{{- if and (or (and (eq .Values.architecture "standalone") (or (eq .Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort"))) (and (eq .Values.architecture "replicaset") .Values.externalAccess.enabled)) (not .Values.auth.enabled) }}
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
 WARNING
 | 
			
		||||
 | 
			
		||||
    By not enabling "mongodb.auth.enabled" you have most likely exposed the
 | 
			
		||||
    MongoDB® service externally without any authentication mechanism.
 | 
			
		||||
 | 
			
		||||
    For security reasons, we strongly suggest that you enable authentication
 | 
			
		||||
    setting the "mongodb.auth.enabled" parameter to "true".
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
{{- end }}
 | 
			
		||||
 | 
			
		||||
** Please be patient while the chart is being deployed **
 | 
			
		||||
 | 
			
		||||
MongoDB® can be accessed on the following DNS name(s) and ports from within your cluster:
 | 
			
		||||
 | 
			
		||||
{{- if eq .Values.architecture "replicaset" }}
 | 
			
		||||
{{ join "\n" $mongoList | nindent 4 }}
 | 
			
		||||
{{- else }}
 | 
			
		||||
 | 
			
		||||
    {{ $fullname }}.{{ $releaseNamespace }}.svc.{{ .Values.clusterDomain }}
 | 
			
		||||
 | 
			
		||||
{{- end }}
 | 
			
		||||
 | 
			
		||||
{{- if .Values.auth.enabled }}
 | 
			
		||||
 | 
			
		||||
To get the root password run:
 | 
			
		||||
 | 
			
		||||
    export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace {{ template "mongodb.namespace" . }} {{ template "mongodb.secretName" . }} -o jsonpath="{.data.mongodb-root-password}" | base64 -d)
 | 
			
		||||
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- $customUsers := include "mongodb.customUsers" . -}}
 | 
			
		||||
{{- $customDatabases := include "mongodb.customDatabases" . -}}
 | 
			
		||||
{{- if and (not (empty $customUsers)) (not (empty $customDatabases)) }}
 | 
			
		||||
{{- $customUsersList := splitList "," $customUsers }}
 | 
			
		||||
{{- range $index, $user := $customUsersList }}
 | 
			
		||||
 | 
			
		||||
To get the password for "{{ $user }}" run:
 | 
			
		||||
 | 
			
		||||
    export MONGODB_PASSWORD=$(kubectl get secret --namespace {{ include "mongodb.namespace" $ }} {{ include "mongodb.secretName" $ }} -o jsonpath="{.data.mongodb-passwords}" | base64 -d | awk -F',' '{print ${{ add 1 $index }}}')
 | 
			
		||||
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
 | 
			
		||||
To connect to your database, create a MongoDB® client container:
 | 
			
		||||
 | 
			
		||||
    kubectl run --namespace {{ template "mongodb.namespace" . }} {{ template "mongodb.fullname" . }}-client --rm --tty -i --restart='Never' --env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" --image {{ template "mongodb.image" . }} --command -- bash
 | 
			
		||||
 | 
			
		||||
Then, run the following command:
 | 
			
		||||
 | 
			
		||||
    {{- if eq .Values.architecture "replicaset" }}
 | 
			
		||||
    mongosh admin --host "{{ join "," $mongoList }}" {{- if .Values.auth.enabled }} --authenticationDatabase admin -u $MONGODB_ROOT_USER -p $MONGODB_ROOT_PASSWORD{{- end }}
 | 
			
		||||
    {{- else }}
 | 
			
		||||
    mongosh admin --host "{{ template "mongodb.service.nameOverride" . }}" {{- if .Values.auth.enabled }} --authenticationDatabase admin -u $MONGODB_ROOT_USER -p $MONGODB_ROOT_PASSWORD{{- end }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
 | 
			
		||||
{{- if and (eq .Values.architecture "replicaset") .Values.externalAccess.enabled }}
 | 
			
		||||
 | 
			
		||||
To connect to your database nodes from outside, you need to add both primary and secondary nodes hostnames/IPs to your Mongo client. To obtain them, follow the instructions below:
 | 
			
		||||
 | 
			
		||||
{{- if eq "NodePort" .Values.externalAccess.service.type }}
 | 
			
		||||
{{- if .Values.externalAccess.service.domain }}
 | 
			
		||||
 | 
			
		||||
    MongoDB® nodes domain: Use your provided hostname to reach MongoDB® nodes, {{ .Values.externalAccess.service.domain }}
 | 
			
		||||
 | 
			
		||||
{{- else }}
 | 
			
		||||
 | 
			
		||||
    MongoDB® nodes domain: you can reach MongoDB® nodes on any of the K8s nodes external IPs.
 | 
			
		||||
 | 
			
		||||
        kubectl get nodes -o wide
 | 
			
		||||
 | 
			
		||||
{{- end }}
 | 
			
		||||
 | 
			
		||||
    MongoDB® nodes port: You will have a different node port for each MongoDB® node. You can get the list of configured node ports using the command below:
 | 
			
		||||
 | 
			
		||||
        echo "$(kubectl get svc --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ template "mongodb.name" . }},app.kubernetes.io/instance={{ .Release.Name }},app.kubernetes.io/component=mongodb,pod" -o jsonpath='{.items[*].spec.ports[0].nodePort}' | tr ' ' '\n')"
 | 
			
		||||
 | 
			
		||||
{{- else if contains "LoadBalancer" .Values.externalAccess.service.type }}
 | 
			
		||||
 | 
			
		||||
  NOTE: It may take a few minutes for the LoadBalancer IPs to be available.
 | 
			
		||||
        Watch the status with: 'kubectl get svc --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ template "mongodb.name" . }},app.kubernetes.io/instance={{ .Release.Name }},app.kubernetes.io/component=mongodb,pod" -w'
 | 
			
		||||
 | 
			
		||||
    MongoDB® nodes domain: You will have a different external IP for each MongoDB® node. You can get the list of external IPs using the command below:
 | 
			
		||||
 | 
			
		||||
        echo "$(kubectl get svc --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ template "mongodb.name" . }},app.kubernetes.io/instance={{ .Release.Name }},app.kubernetes.io/component=mongodb,pod" -o jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}' | tr ' ' '\n')"
 | 
			
		||||
 | 
			
		||||
    MongoDB® nodes port: {{ .Values.externalAccess.service.ports.mongodb }}
 | 
			
		||||
 | 
			
		||||
{{- end }}
 | 
			
		||||
 | 
			
		||||
{{- else if eq .Values.architecture "standalone" }}
 | 
			
		||||
 | 
			
		||||
To connect to your database from outside the cluster execute the following commands:
 | 
			
		||||
 | 
			
		||||
{{- if contains "NodePort" .Values.service.type }}
 | 
			
		||||
 | 
			
		||||
    export NODE_IP=$(kubectl get nodes --namespace {{ template "mongodb.namespace" . }} -o jsonpath="{.items[0].status.addresses[0].address}")
 | 
			
		||||
    export NODE_PORT=$(kubectl get --namespace {{ template "mongodb.namespace" . }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "mongodb.service.nameOverride" . }})
 | 
			
		||||
    mongo --host $NODE_IP --port $NODE_PORT {{- if .Values.auth.enabled }} --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD{{- end }}
 | 
			
		||||
 | 
			
		||||
{{- else if contains "LoadBalancer" .Values.service.type }}
 | 
			
		||||
 | 
			
		||||
  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
 | 
			
		||||
        Watch the status with: 'kubectl get svc --namespace {{ template "mongodb.namespace" . }} -w {{ template "mongodb.service.nameOverride" . }}'
 | 
			
		||||
 | 
			
		||||
    export SERVICE_IP=$(kubectl get svc --namespace {{ template "mongodb.namespace" . }} {{ template "mongodb.service.nameOverride" . }} --template "{{ "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}" }}")
 | 
			
		||||
    mongosh --host $SERVICE_IP --port {{ $portNumber }} {{- if .Values.auth.enabled }} --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD{{- end }}
 | 
			
		||||
 | 
			
		||||
{{- else if contains "ClusterIP" .Values.service.type }}
 | 
			
		||||
 | 
			
		||||
    kubectl port-forward --namespace {{ template "mongodb.namespace" . }} svc/{{ template "mongodb.service.nameOverride" . }} {{ $portNumber }}:{{ $portNumber }} &
 | 
			
		||||
    mongosh --host 127.0.0.1 {{- if .Values.auth.enabled }} --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD{{- end }}
 | 
			
		||||
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
 | 
			
		||||
{{- if .Values.metrics.enabled }}
 | 
			
		||||
 | 
			
		||||
To access the MongoDB® Prometheus metrics, get the MongoDB® Prometheus URL by running:
 | 
			
		||||
 | 
			
		||||
    kubectl port-forward --namespace {{ .Release.Namespace }} svc/{{ printf "%s-metrics" (include "mongodb.fullname" .) }} {{ .Values.metrics.service.ports.metrics }}:{{ .Values.metrics.service.ports.metrics }} &
 | 
			
		||||
    echo "Prometheus Metrics URL: http://127.0.0.1:{{ .Values.metrics.service.ports.metrics }}/metrics"
 | 
			
		||||
 | 
			
		||||
Then, open the obtained URL in a browser.
 | 
			
		||||
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- include "common.warnings.rollingTag" .Values.image }}
 | 
			
		||||
{{- include "common.warnings.rollingTag" .Values.metrics.image }}
 | 
			
		||||
{{- include "common.warnings.rollingTag" .Values.externalAccess.autoDiscovery.image }}
 | 
			
		||||
{{- include "common.warnings.rollingTag" .Values.volumePermissions.image }}
 | 
			
		||||
{{- include "common.warnings.rollingTag" .Values.tls.image }}
 | 
			
		||||
{{- include "mongodb.validateValues" . }}
 | 
			
		||||
{{- include "common.warnings.resources" (dict "sections" (list "arbiter" "externalAccess.autoDiscovery" "hidden" "metrics" "" "tls" "volumePermissions") "context" $) }}
 | 
			
		||||
{{- include "common.warnings.modifiedImages" (dict "images" (list .Values.image .Values.tls.image .Values.externalAccess.autoDiscovery.image .Values.externalAccess.dnsCheck.image .Values.volumePermissions.image .Values.metrics.image) "context" $) }}
 | 
			
		||||
							
								
								
									
										724
									
								
								opencloud/charts/mongodb/templates/_helpers.tpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										724
									
								
								opencloud/charts/mongodb/templates/_helpers.tpl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,724 @@
 | 
			
		||||
{{/*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{/* vim: set filetype=mustache: */}}
 | 
			
		||||
{{/*
 | 
			
		||||
Expand the name of the chart.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.name" -}}
 | 
			
		||||
{{- include "common.names.name" . -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Create a default fully qualified app name.
 | 
			
		||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
 | 
			
		||||
If release name contains chart name it will be used as a full name.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.fullname" -}}
 | 
			
		||||
{{- include "common.names.fullname" . -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Create a default mongo service name which can be overridden.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.service.nameOverride" -}}
 | 
			
		||||
    {{- if and .Values.service .Values.service.nameOverride -}}
 | 
			
		||||
        {{- print .Values.service.nameOverride -}}
 | 
			
		||||
    {{- else -}}
 | 
			
		||||
        {{- if eq .Values.architecture "replicaset" -}}
 | 
			
		||||
            {{- printf "%s-headless" (include "mongodb.fullname" .) -}}
 | 
			
		||||
        {{- else -}}
 | 
			
		||||
            {{- printf "%s" (include "mongodb.fullname" .) -}}
 | 
			
		||||
        {{- end -}}
 | 
			
		||||
    {{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Create a default mongo arbiter service name which can be overridden.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.arbiter.service.nameOverride" -}}
 | 
			
		||||
    {{- if and .Values.arbiter.service .Values.arbiter.service.nameOverride -}}
 | 
			
		||||
        {{- print .Values.arbiter.service.nameOverride -}}
 | 
			
		||||
    {{- else -}}
 | 
			
		||||
        {{- printf "%s-arbiter-headless" (include "mongodb.fullname" .) -}}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Create a default mongo hidden service name which can be overridden.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.hidden.service.nameOverride" -}}
 | 
			
		||||
    {{- if and .Values.hidden.service .Values.hidden.service.nameOverride -}}
 | 
			
		||||
        {{- print .Values.hidden.service.nameOverride -}}
 | 
			
		||||
    {{- else -}}
 | 
			
		||||
        {{- printf "%s-hidden-headless" (include "mongodb.fullname" .) -}}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the proper MongoDB® image name
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.image" -}}
 | 
			
		||||
{{- include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the proper image name (for the metrics image)
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.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.volumePermissions.image" -}}
 | 
			
		||||
{{- include "common.images.image" (dict "imageRoot" .Values.volumePermissions.image "global" .Values.global) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the proper image name (for the init container auto-discovery image)
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.externalAccess.autoDiscovery.image" -}}
 | 
			
		||||
{{- include "common.images.image" (dict "imageRoot" .Values.externalAccess.autoDiscovery.image "global" .Values.global) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the proper image name (for the init container dns-check image)
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.externalAccess.dnsCheck.image" -}}
 | 
			
		||||
{{- include "common.images.image" (dict "imageRoot" .Values.externalAccess.dnsCheck.image "global" .Values.global) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the proper image name (for the TLS Certs image)
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.tls.image" -}}
 | 
			
		||||
{{- include "common.images.image" (dict "imageRoot" .Values.tls.image "global" .Values.global) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the proper Docker Image Registry Secret Names
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.imagePullSecrets" -}}
 | 
			
		||||
{{- include "common.images.renderPullSecrets" (dict "images" (list .Values.image .Values.metrics.image .Values.volumePermissions.image .Values.tls.image .Values.externalAccess.dnsCheck.image .Values.externalAccess.autoDiscovery.image) "context" $) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Allow the release namespace to be overridden for multi-namespace deployments in combined charts.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.namespace" -}}
 | 
			
		||||
    {{- if and .Values.global .Values.global.namespaceOverride -}}
 | 
			
		||||
        {{- print .Values.global.namespaceOverride -}}
 | 
			
		||||
    {{- else -}}
 | 
			
		||||
        {{- print .Release.Namespace -}}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- define "mongodb.serviceMonitor.namespace" -}}
 | 
			
		||||
    {{- if .Values.metrics.serviceMonitor.namespace -}}
 | 
			
		||||
        {{- print .Values.metrics.serviceMonitor.namespace -}}
 | 
			
		||||
    {{- else -}}
 | 
			
		||||
        {{- include "mongodb.namespace" . -}}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- define "mongodb.prometheusRule.namespace" -}}
 | 
			
		||||
    {{- if .Values.metrics.prometheusRule.namespace -}}
 | 
			
		||||
        {{- print .Values.metrics.prometheusRule.namespace -}}
 | 
			
		||||
    {{- else -}}
 | 
			
		||||
        {{- include "mongodb.namespace" . -}}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Returns the proper service account name depending if an explicit service account name is set
 | 
			
		||||
in the values file. If the name is not set it will default to either mongodb.fullname if serviceAccount.create
 | 
			
		||||
is true or default otherwise.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.serviceAccountName" -}}
 | 
			
		||||
    {{- if .Values.serviceAccount.create -}}
 | 
			
		||||
        {{- default (include "mongodb.fullname" .) (print .Values.serviceAccount.name) -}}
 | 
			
		||||
    {{- else -}}
 | 
			
		||||
        {{- default "default" (print .Values.serviceAccount.name) -}}
 | 
			
		||||
    {{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the list of custom users to create during the initialization (string format)
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.customUsers" -}}
 | 
			
		||||
    {{- $customUsers := list -}}
 | 
			
		||||
    {{- if .Values.auth.username -}}
 | 
			
		||||
        {{- $customUsers = append $customUsers .Values.auth.username }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- range .Values.auth.usernames }}
 | 
			
		||||
        {{- $customUsers = append $customUsers . }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- printf "%s" (default "" (join "," $customUsers)) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the list of passwords for the custom users (string format)
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.customPasswords" -}}
 | 
			
		||||
    {{- $customPasswords := list -}}
 | 
			
		||||
    {{- if .Values.auth.password -}}
 | 
			
		||||
        {{- $customPasswords = append $customPasswords .Values.auth.password }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- range .Values.auth.passwords }}
 | 
			
		||||
        {{- $customPasswords = append $customPasswords . }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- printf "%s" (default "" (join "," $customPasswords)) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the list of custom databases to create during the initialization (string format)
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.customDatabases" -}}
 | 
			
		||||
    {{- $customDatabases := list -}}
 | 
			
		||||
    {{- if .Values.auth.database -}}
 | 
			
		||||
        {{- $customDatabases = append $customDatabases .Values.auth.database }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- range .Values.auth.databases }}
 | 
			
		||||
        {{- $customDatabases = append $customDatabases . }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- printf "%s" (default "" (join "," $customDatabases)) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the configmap with the MongoDB® configuration
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.configmapName" -}}
 | 
			
		||||
{{- if .Values.existingConfigmap -}}
 | 
			
		||||
    {{- printf "%s" (tpl .Values.existingConfigmap $) -}}
 | 
			
		||||
{{- else -}}
 | 
			
		||||
    {{- printf "%s" (include "mongodb.fullname" .) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return true if a configmap object should be created for MongoDB®
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.createConfigmap" -}}
 | 
			
		||||
{{- if and .Values.configuration (not .Values.existingConfigmap) }}
 | 
			
		||||
    {{- true -}}
 | 
			
		||||
{{- else -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the secret with MongoDB® credentials
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.secretName" -}}
 | 
			
		||||
    {{- if .Values.auth.existingSecret -}}
 | 
			
		||||
        {{- printf "%s" (tpl .Values.auth.existingSecret $) -}}
 | 
			
		||||
    {{- else -}}
 | 
			
		||||
        {{- printf "%s" (include "mongodb.fullname" .) -}}
 | 
			
		||||
    {{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return true if a secret object should be created for MongoDB®
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.createSecret" -}}
 | 
			
		||||
{{- if and .Values.auth.enabled (not .Values.auth.existingSecret) }}
 | 
			
		||||
    {{- true -}}
 | 
			
		||||
{{- else -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return true if a secret object should be created for MongoDB
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.createPreviousSecret" -}}
 | 
			
		||||
{{- if and .Values.passwordUpdateJob.previousPasswords.rootPassword (not .Values.passwordUpdateJob.previousPasswords.existingSecret) }}
 | 
			
		||||
    {{- true -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the secret with previous MongoDB credentials
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.update-job.previousSecretName" -}}
 | 
			
		||||
    {{- if .Values.passwordUpdateJob.previousPasswords.existingSecret -}}
 | 
			
		||||
        {{- /* The secret with the new password is managed externally */ -}}
 | 
			
		||||
        {{- tpl .Values.passwordUpdateJob.previousPasswords.existingSecret $ -}}
 | 
			
		||||
    {{- else if .Values.passwordUpdateJob.previousPasswords.rootPassword -}}
 | 
			
		||||
        {{- /* The secret with the new password is managed externally */ -}}
 | 
			
		||||
        {{- printf "%s-previous-secret" (include "common.names.fullname" .) | trunc 63 | trimSuffix "-" -}}
 | 
			
		||||
    {{- else -}}
 | 
			
		||||
        {{- /* The secret with the new password is managed by the helm chart. We use the current secret name as it has the old password */ -}}
 | 
			
		||||
        {{- include "common.names.fullname" . -}}
 | 
			
		||||
    {{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the secret with new MongoDB credentials
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.update-job.newSecretName" -}}
 | 
			
		||||
    {{- if and (not .Values.passwordUpdateJob.previousPasswords.existingSecret) (not .Values.passwordUpdateJob.previousPasswords.rootPassword) -}}
 | 
			
		||||
        {{- /* The secret with the new password is managed by the helm chart. We create a new secret as the current one has the old password */ -}}
 | 
			
		||||
        {{- printf "%s-new-secret" (include "common.names.fullname" .) | trunc 63 | trimSuffix "-" -}}
 | 
			
		||||
    {{- else -}}
 | 
			
		||||
        {{- /* The secret with the new password is managed externally */ -}}
 | 
			
		||||
        {{- include "mongodb.secretName" . -}}
 | 
			
		||||
    {{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Get the initialization scripts ConfigMap name.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.initdbScriptsCM" -}}
 | 
			
		||||
{{- if .Values.initdbScriptsConfigMap -}}
 | 
			
		||||
{{- printf "%s" (tpl .Values.initdbScriptsConfigMap $) -}}
 | 
			
		||||
{{- else -}}
 | 
			
		||||
{{- printf "%s-init-scripts" (include "mongodb.fullname" .) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Get initial primary host to configure MongoDB cluster.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.initialPrimaryHost" -}}
 | 
			
		||||
{{ ternary ( printf "%s-0.%s.$(MY_POD_NAMESPACE).svc.%s" (include "mongodb.fullname" .) (include "mongodb.service.nameOverride" .) .Values.clusterDomain ) ( first .Values.externalAccess.service.publicNames ) ( empty .Values.externalAccess.service.publicNames ) }}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Init container definition to change/establish volume permissions.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.initContainer.volumePermissions" }}
 | 
			
		||||
- name: volume-permissions
 | 
			
		||||
  image: {{ include "mongodb.volumePermissions.image" . }}
 | 
			
		||||
  imagePullPolicy: {{ .Values.volumePermissions.image.pullPolicy | quote }}
 | 
			
		||||
  command:
 | 
			
		||||
    - /bin/bash
 | 
			
		||||
  args:
 | 
			
		||||
    - -ec
 | 
			
		||||
    - |
 | 
			
		||||
      mkdir -p {{ printf "%s/%s" .Values.persistence.mountPath (default "" .Values.persistence.subPath) }}
 | 
			
		||||
      chown {{ .Values.containerSecurityContext.runAsUser }}:{{ .Values.podSecurityContext.fsGroup }} {{ printf "%s/%s" .Values.persistence.mountPath (default "" .Values.persistence.subPath) }}
 | 
			
		||||
      find  {{ printf "%s/%s" .Values.persistence.mountPath (default "" .Values.persistence.subPath) }} -mindepth 1 -maxdepth 1 -not -name ".snapshot" -not -name "lost+found" | xargs -r chown -R {{ .Values.containerSecurityContext.runAsUser }}:{{ .Values.podSecurityContext.fsGroup }}
 | 
			
		||||
  {{- if eq ( toString ( .Values.volumePermissions.securityContext.runAsUser )) "auto" }}
 | 
			
		||||
  securityContext: {{- omit .Values.volumePermissions.securityContext "runAsUser" | toYaml | nindent 12 }}
 | 
			
		||||
  {{- else }}
 | 
			
		||||
  securityContext: {{- .Values.volumePermissions.securityContext | toYaml | nindent 12 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if .Values.volumePermissions.resources }}
 | 
			
		||||
  resources: {{- include "common.tplvalues.render" (dict "value" .Values.volumePermissions.resources "context" $) | nindent 12 }}
 | 
			
		||||
  {{- else if ne .Values.volumePermissions.resourcesPreset "none" }}
 | 
			
		||||
  resources: {{- include "common.resources.preset" (dict "type" .Values.volumePermissions.resourcesPreset) | nindent 12 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  volumeMounts:
 | 
			
		||||
    - name: empty-dir
 | 
			
		||||
      mountPath: /tmp
 | 
			
		||||
      subPath: tmp-dir
 | 
			
		||||
    - name: {{ .Values.persistence.name | default "datadir" }}
 | 
			
		||||
      mountPath: {{ .Values.persistence.mountPath }}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Init container definition to recover log dir.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.initContainer.prepareLogDir" }}
 | 
			
		||||
- name: log-dir
 | 
			
		||||
  image: {{ include "mongodb.image" . }}
 | 
			
		||||
  imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
 | 
			
		||||
  command:
 | 
			
		||||
    - /bin/bash
 | 
			
		||||
  args:
 | 
			
		||||
    - -ec
 | 
			
		||||
    - |
 | 
			
		||||
      ln -sf /dev/stdout "/opt/bitnami/mongodb/logs/mongodb.log"
 | 
			
		||||
  {{- if .Values.containerSecurityContext.enabled }}
 | 
			
		||||
  securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.containerSecurityContext "context" $) | nindent 12 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if .Values.resources }}
 | 
			
		||||
  resources: {{- include "common.tplvalues.render" (dict "value" .Values.resources "context" $) | nindent 12 }}
 | 
			
		||||
  {{- else if ne .Values.resourcesPreset "none" }}
 | 
			
		||||
  resources: {{- include "common.resources.preset" (dict "type" .Values.resourcesPreset) | nindent 12 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  volumeMounts:
 | 
			
		||||
    - name: empty-dir
 | 
			
		||||
      mountPath: /opt/bitnami/mongodb/logs
 | 
			
		||||
      subPath: app-logs-dir
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Init container definition to get external IP addresses.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.initContainers.autoDiscovery" -}}
 | 
			
		||||
- name: auto-discovery
 | 
			
		||||
  image: {{ include "mongodb.externalAccess.autoDiscovery.image" . }}
 | 
			
		||||
  imagePullPolicy: {{ .Values.externalAccess.autoDiscovery.image.pullPolicy | quote }}
 | 
			
		||||
  # We need the service account token for contacting the k8s API
 | 
			
		||||
  command:
 | 
			
		||||
    - /scripts/auto-discovery.sh
 | 
			
		||||
  env:
 | 
			
		||||
    - name: MY_POD_NAME
 | 
			
		||||
      valueFrom:
 | 
			
		||||
        fieldRef:
 | 
			
		||||
          fieldPath: metadata.name
 | 
			
		||||
    - name: SHARED_FILE
 | 
			
		||||
      value: "/shared/info.txt"
 | 
			
		||||
  {{- if .Values.externalAccess.autoDiscovery.resources }}
 | 
			
		||||
  resources: {{- include "common.tplvalues.render" (dict "value" .Values.externalAccess.autoDiscovery.resources "context" $) | nindent 12 }}
 | 
			
		||||
  {{- else if ne .Values.externalAccess.autoDiscovery.resourcesPreset "none" }}
 | 
			
		||||
  resources: {{- include "common.resources.preset" (dict "type" .Values.externalAccess.autoDiscovery.resourcesPreset) | nindent 12 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  volumeMounts:
 | 
			
		||||
    - name: shared
 | 
			
		||||
      mountPath: /shared
 | 
			
		||||
    - name: scripts
 | 
			
		||||
      mountPath: /scripts/auto-discovery.sh
 | 
			
		||||
      subPath: auto-discovery.sh
 | 
			
		||||
    - name: empty-dir
 | 
			
		||||
      mountPath: /tmp
 | 
			
		||||
      subPath: tmp-dir
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Init container definition to wait external DNS names.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.initContainers.dnsCheck" -}}
 | 
			
		||||
- name: dns-check
 | 
			
		||||
  image: {{ include "mongodb.externalAccess.dnsCheck.image" . }}
 | 
			
		||||
  imagePullPolicy: {{ .Values.externalAccess.dnsCheck.image.pullPolicy | quote }}
 | 
			
		||||
  command:
 | 
			
		||||
    - /bin/bash
 | 
			
		||||
  args:
 | 
			
		||||
    - -ec
 | 
			
		||||
    - |
 | 
			
		||||
      # MONGODB_INITIAL_PRIMARY_HOST should be resolvable
 | 
			
		||||
      while ! (getent ahosts "{{ include "mongodb.initialPrimaryHost" . }}" | grep STREAM); do
 | 
			
		||||
        sleep 10
 | 
			
		||||
      done
 | 
			
		||||
  {{- if .Values.containerSecurityContext.enabled }}
 | 
			
		||||
  securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.containerSecurityContext "context" $) | nindent 12 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if .Values.externalAccess.dnsCheck.resources }}
 | 
			
		||||
  resources: {{- toYaml .Values.externalAccess.dnsCheck.resources | nindent 12 }}
 | 
			
		||||
  {{- else if ne .Values.externalAccess.dnsCheck.resourcesPreset "none" }}
 | 
			
		||||
  resources: {{- include "common.resources.preset" (dict "type" .Values.externalAccess.dnsCheck.resourcesPreset) | nindent 12 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return true if the Arbiter should be deployed
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.arbiter.enabled" -}}
 | 
			
		||||
{{- if and (eq .Values.architecture "replicaset") .Values.arbiter.enabled }}
 | 
			
		||||
    {{- true -}}
 | 
			
		||||
{{- else -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the configmap with the MongoDB® configuration for the Arbiter
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.arbiter.configmapName" -}}
 | 
			
		||||
{{- if .Values.arbiter.existingConfigmap -}}
 | 
			
		||||
    {{- printf "%s" (tpl .Values.arbiter.existingConfigmap $) -}}
 | 
			
		||||
{{- else -}}
 | 
			
		||||
    {{- printf "%s-arbiter" (include "mongodb.fullname" .) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return true if a configmap object should be created for MongoDB® Arbiter
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.arbiter.createConfigmap" -}}
 | 
			
		||||
{{- if and (eq .Values.architecture "replicaset") .Values.arbiter.enabled .Values.arbiter.configuration (not .Values.arbiter.existingConfigmap) }}
 | 
			
		||||
    {{- true -}}
 | 
			
		||||
{{- else -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return true if the Hidden should be deployed
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.hidden.enabled" -}}
 | 
			
		||||
{{- if and (eq .Values.architecture "replicaset") .Values.hidden.enabled }}
 | 
			
		||||
    {{- true -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the configmap with the MongoDB® configuration for the Hidden
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.hidden.configmapName" -}}
 | 
			
		||||
{{- if .Values.hidden.existingConfigmap -}}
 | 
			
		||||
    {{- printf "%s" (tpl .Values.hidden.existingConfigmap $) -}}
 | 
			
		||||
{{- else -}}
 | 
			
		||||
    {{- printf "%s-hidden" (include "mongodb.fullname" .) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return true if a configmap object should be created for MongoDB® Hidden
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.hidden.createConfigmap" -}}
 | 
			
		||||
{{- if and  (include "mongodb.hidden.enabled" .) .Values.hidden.enabled .Values.hidden.configuration (not .Values.hidden.existingConfigmap) }}
 | 
			
		||||
    {{- true -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Compile all warnings into a single message, and call fail.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.validateValues" -}}
 | 
			
		||||
{{- $messages := list -}}
 | 
			
		||||
{{- $messages := append $messages (include "mongodb.validateValues.pspAndRBAC" .) -}}
 | 
			
		||||
{{- $messages := append $messages (include "mongodb.validateValues.architecture" .) -}}
 | 
			
		||||
{{- $messages := append $messages (include "mongodb.validateValues.customUsersDBs" .) -}}
 | 
			
		||||
{{- $messages := append $messages (include "mongodb.validateValues.customUsersDBsLength" .) -}}
 | 
			
		||||
{{- $messages := append $messages (include "mongodb.validateValues.externalAccessServiceType" .) -}}
 | 
			
		||||
{{- $messages := append $messages (include "mongodb.validateValues.loadBalancerIPsListLength" .) -}}
 | 
			
		||||
{{- $messages := append $messages (include "mongodb.validateValues.nodePortListLength" .) -}}
 | 
			
		||||
{{- $messages := append $messages (include "mongodb.validateValues.externalAccessAutoDiscoveryRBAC" .) -}}
 | 
			
		||||
{{- $messages := append $messages (include "mongodb.validateValues.externalAccessAutoDiscoverySA" .) -}}
 | 
			
		||||
{{- $messages := append $messages (include "mongodb.validateValues.replicaset.existingSecrets" .) -}}
 | 
			
		||||
{{- $messages := append $messages (include "mongodb.validateValues.hidden.existingSecrets" .) -}}
 | 
			
		||||
{{- $messages := without $messages "" -}}
 | 
			
		||||
{{- $message := join "\n" $messages -}}
 | 
			
		||||
 | 
			
		||||
{{- if $message -}}
 | 
			
		||||
{{-   printf "\nVALUES VALIDATION:\n%s" $message | fail -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/* Validate RBAC is created when using PSP */}}
 | 
			
		||||
{{- define "mongodb.validateValues.pspAndRBAC" -}}
 | 
			
		||||
{{- if and (.Values.podSecurityPolicy.create) (not .Values.rbac.create) -}}
 | 
			
		||||
mongodb: podSecurityPolicy.create, rbac.create
 | 
			
		||||
    Both podSecurityPolicy.create and rbac.create must be true, if you want
 | 
			
		||||
    to create podSecurityPolicy
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/* Validate values of MongoDB® - must provide a valid architecture */}}
 | 
			
		||||
{{- define "mongodb.validateValues.architecture" -}}
 | 
			
		||||
{{- if and (ne .Values.architecture "standalone") (ne .Values.architecture "replicaset") -}}
 | 
			
		||||
mongodb: architecture
 | 
			
		||||
    Invalid architecture selected. Valid values are "standalone" and
 | 
			
		||||
    "replicaset". Please set a valid architecture (--set mongodb.architecture="xxxx")
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Validate values of MongoDB® - both auth.usernames and auth.databases are necessary
 | 
			
		||||
to create a custom user and database during 1st initialization
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.validateValues.customUsersDBs" -}}
 | 
			
		||||
{{- $customUsers := include "mongodb.customUsers" . -}}
 | 
			
		||||
{{- $customDatabases := include "mongodb.customDatabases" . -}}
 | 
			
		||||
{{- if or (and (empty $customUsers) (not (empty $customDatabases))) (and (not (empty $customUsers)) (empty $customDatabases)) }}
 | 
			
		||||
mongodb: auth.usernames, auth.databases
 | 
			
		||||
    Both auth.usernames and auth.databases must be provided to create
 | 
			
		||||
    custom users and databases during 1st initialization.
 | 
			
		||||
    Please set both of them (--set auth.usernames[0]="xxxx",auth.databases[0]="yyyy")
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Validate values of MongoDB® - both auth.usernames and auth.databases arrays should have the same length
 | 
			
		||||
to create a custom user and database during 1st initialization
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.validateValues.customUsersDBsLength" -}}
 | 
			
		||||
{{- if ne (len .Values.auth.usernames) (len .Values.auth.databases) }}
 | 
			
		||||
mongodb: auth.usernames, auth.databases
 | 
			
		||||
    Both auth.usernames and auth.databases arrays should have the same length
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Validate values of MongoDB® - service type for external access
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.validateValues.externalAccessServiceType" -}}
 | 
			
		||||
{{- if and (eq .Values.architecture "replicaset") (not (eq .Values.externalAccess.service.type "NodePort")) (not (eq .Values.externalAccess.service.type "LoadBalancer")) (not (eq .Values.externalAccess.service.type "ClusterIP")) -}}
 | 
			
		||||
mongodb: externalAccess.service.type
 | 
			
		||||
    Available service type for external access are NodePort, LoadBalancer or ClusterIP.
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Validate values of MongoDB® - number of replicas must be the same than LoadBalancer IPs list
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.validateValues.loadBalancerIPsListLength" -}}
 | 
			
		||||
{{- $replicaCount := int .Values.replicaCount }}
 | 
			
		||||
{{- $loadBalancerListLength := len .Values.externalAccess.service.loadBalancerIPs }}
 | 
			
		||||
{{- $publicNamesListLength := len .Values.externalAccess.service.publicNames }}
 | 
			
		||||
{{- if and (eq .Values.architecture "replicaset") .Values.externalAccess.enabled (eq .Values.externalAccess.service.type "LoadBalancer") -}}
 | 
			
		||||
{{- if and (not .Values.externalAccess.autoDiscovery.enabled) (eq $loadBalancerListLength 0) (eq $publicNamesListLength 0) -}}
 | 
			
		||||
mongodb: .Values.externalAccess.service.loadBalancerIPs, .Values.externalAccess.service.publicNames
 | 
			
		||||
    externalAccess.service.loadBalancerIPs, externalAccess.service.publicNames or externalAccess.autoDiscovery.enabled are required when externalAccess is enabled.
 | 
			
		||||
{{- else if and (not .Values.externalAccess.autoDiscovery.enabled) (not (eq $replicaCount $loadBalancerListLength )) (not (eq $loadBalancerListLength 0)) -}}
 | 
			
		||||
mongodb: .Values.externalAccess.service.loadBalancerIPs
 | 
			
		||||
    Number of replicas ({{ $replicaCount }}) and loadBalancerIPs array length ({{ $loadBalancerListLength }}) must be the same.
 | 
			
		||||
{{- else if and (not .Values.externalAccess.autoDiscovery.enabled) (not (eq $replicaCount $publicNamesListLength )) (not (eq $publicNamesListLength 0)) -}}
 | 
			
		||||
mongodb: .Values.externalAccess.service.publicNames
 | 
			
		||||
    Number of replicas ({{ $replicaCount }}) and publicNames array length ({{ $publicNamesListLength }}) must be the same.
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Validate values of MongoDB® - number of replicas must be the same than NodePort list
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.validateValues.nodePortListLength" -}}
 | 
			
		||||
{{- $replicaCount := int .Values.replicaCount }}
 | 
			
		||||
{{- $nodePortListLength := len .Values.externalAccess.service.nodePorts }}
 | 
			
		||||
{{- if and (eq .Values.architecture "replicaset") .Values.externalAccess.enabled (eq .Values.externalAccess.service.type "NodePort") -}}
 | 
			
		||||
{{- if and (not .Values.externalAccess.autoDiscovery.enabled) (eq $nodePortListLength 0) -}}
 | 
			
		||||
mongodb: .Values.externalAccess.service.nodePorts
 | 
			
		||||
    externalAccess.service.nodePorts or externalAccess.autoDiscovery.enabled are required when externalAccess is enabled.
 | 
			
		||||
{{- else if and (not .Values.externalAccess.autoDiscovery.enabled) (not (eq $replicaCount $nodePortListLength )) -}} 
 | 
			
		||||
mongodb: .Values.externalAccess.service.nodePorts
 | 
			
		||||
    Number of replicas ({{ $replicaCount }}) and nodePorts ({{ $nodePortListLength }}) array length must be the same.
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Validate values of MongoDB® - RBAC should be enabled when autoDiscovery is enabled
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.validateValues.externalAccessAutoDiscoveryRBAC" -}}
 | 
			
		||||
{{- if and (eq .Values.architecture "replicaset") .Values.externalAccess.enabled .Values.externalAccess.autoDiscovery.enabled (not .Values.rbac.create ) }}
 | 
			
		||||
mongodb: rbac.create
 | 
			
		||||
    By specifying "externalAccess.enabled=true" and "externalAccess.autoDiscovery.enabled=true"
 | 
			
		||||
    an initContainer will be used to autodetect the external IPs/ports by querying the
 | 
			
		||||
    K8s API. Please note this initContainer requires specific RBAC resources. You can create them
 | 
			
		||||
    by specifying "--set rbac.create=true".
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Validate values of MongoDB® - automountServiceAccountToken should be enabled when autoDiscovery is enabled
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.validateValues.externalAccessAutoDiscoverySA" -}}
 | 
			
		||||
{{- if and (eq .Values.architecture "replicaset") .Values.externalAccess.enabled .Values.externalAccess.autoDiscovery.enabled (not .Values.automountServiceAccountToken ) }}
 | 
			
		||||
mongodb: automountServiceAccountToken
 | 
			
		||||
    By specifying "externalAccess.enabled=true" and "externalAccess.autoDiscovery.enabled=true"
 | 
			
		||||
    an initContainer will be used to autodetect the external IPs/ports by querying the
 | 
			
		||||
    K8s API. Please note this initContainer requires a service account to access K8S API.
 | 
			
		||||
    You can attach it to the pod by specifying "--set automountServiceAccountToken=true".
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Validate values of MongoDB® - Number of replicaset secrets must be the same than number of replicaset nodes.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.validateValues.replicaset.existingSecrets" -}}
 | 
			
		||||
{{- if and .Values.tls.enabled (eq .Values.architecture "replicaset") (not (empty .Values.tls.replicaset.existingSecrets)) }}
 | 
			
		||||
{{- $nbSecrets := len .Values.tls.replicaset.existingSecrets -}}
 | 
			
		||||
{{- if not (eq $nbSecrets (int .Values.replicaCount)) }}
 | 
			
		||||
mongodb: tls.replicaset.existingSecrets
 | 
			
		||||
    tls.replicaset.existingSecrets Number of secrets and number of replicaset nodes must be the same.
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Validate values of MongoDB® - Number of hidden secrets must be the same than number of hidden nodes.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.validateValues.hidden.existingSecrets" -}}
 | 
			
		||||
{{- if and .Values.tls.enabled (include "mongodb.hidden.enabled" .) (not (empty .Values.tls.hidden.existingSecrets)) }}
 | 
			
		||||
{{- $nbSecrets := len .Values.tls.hidden.existingSecrets -}}
 | 
			
		||||
{{- if not (eq $nbSecrets (int .Values.hidden.replicaCount)) }}
 | 
			
		||||
mongodb: tls.hidden.existingSecrets
 | 
			
		||||
    tls.hidden.existingSecrets Number of secrets and number of hidden nodes must be the same.
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Validate values of MongoDB® exporter URI string - auth.enabled and/or tls.enabled must be enabled or it defaults
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.mongodb_exporter.uri" -}}
 | 
			
		||||
    {{- $tlsEnabled := .Values.tls.enabled -}}
 | 
			
		||||
    {{- $mTlsEnabled := and $tlsEnabled .Values.tls.mTLS.enabled -}}
 | 
			
		||||
    {{- $tlsArgs := "" -}}
 | 
			
		||||
    {{- if $tlsEnabled -}}
 | 
			
		||||
        {{- $tlsCertKeyFile := ternary "&tlsCertificateKeyFile=/certs/mongodb.pem" "" $mTlsEnabled -}}
 | 
			
		||||
        {{- $tlsArgs = printf "tls=true%s&tlsCAFile=/certs/mongodb-ca-cert" $tlsCertKeyFile -}}
 | 
			
		||||
    {{- end -}}
 | 
			
		||||
    {{- if .Values.metrics.username -}}
 | 
			
		||||
        {{- $uriAuth := ternary "$(echo $MONGODB_METRICS_USERNAME | sed -r \"s/@/%40/g;s/:/%3A/g\"):$(echo $MONGODB_METRICS_PASSWORD | sed -r \"s/@/%40/g;s/:/%3A/g\")@" "" .Values.auth.enabled -}}
 | 
			
		||||
        {{- printf "mongodb://%slocalhost:%d/admin?%s" $uriAuth (int .Values.containerPorts.mongodb) $tlsArgs -}}
 | 
			
		||||
    {{- else -}}
 | 
			
		||||
        {{- $uriAuth := ternary "$MONGODB_ROOT_USER:$(echo $MONGODB_ROOT_PASSWORD | sed -r \"s/@/%40/g;s/:/%3A/g\")@" "" .Values.auth.enabled -}}
 | 
			
		||||
        {{- printf "mongodb://%slocalhost:%d/admin?%s" $uriAuth (int .Values.containerPorts.mongodb) $tlsArgs -}}
 | 
			
		||||
    {{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the appropriate apiGroup for PodSecurityPolicy.
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "podSecurityPolicy.apiGroup" -}}
 | 
			
		||||
{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
 | 
			
		||||
{{- print "policy" -}}
 | 
			
		||||
{{- else -}}
 | 
			
		||||
{{- print "extensions" -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return true if a TLS secret object should be created
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.createTlsSecret" -}}
 | 
			
		||||
{{- if and .Values.tls.enabled (not .Values.tls.existingSecret) (include "mongodb.autoGenerateCerts" .) }}
 | 
			
		||||
    {{- true -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return the secret containing MongoDB® TLS certificates
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.tlsSecretName" -}}
 | 
			
		||||
{{- $secretName := .Values.tls.existingSecret -}}
 | 
			
		||||
{{- if $secretName -}}
 | 
			
		||||
    {{- printf "%s" (tpl $secretName $) -}}
 | 
			
		||||
{{- else -}}
 | 
			
		||||
    {{- printf "%s-ca" (include "mongodb.fullname" .) -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Return true if certificates must be auto generated
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.autoGenerateCerts" -}}
 | 
			
		||||
{{- $standalone := (eq .Values.architecture "standalone") | ternary (not .Values.tls.standalone.existingSecret) true -}}
 | 
			
		||||
{{- $replicaset := (eq .Values.architecture "replicaset") | ternary (empty .Values.tls.replicaset.existingSecrets) true -}}
 | 
			
		||||
{{- $arbiter := (eq (include "mongodb.arbiter.enabled" .) "true") | ternary (not .Values.tls.arbiter.existingSecret) true -}}
 | 
			
		||||
{{- $hidden := (eq (include "mongodb.hidden.enabled" .) "true") | ternary (empty .Values.tls.hidden.existingSecrets) true -}}
 | 
			
		||||
{{- if and $standalone $replicaset $arbiter $hidden -}}
 | 
			
		||||
    {{- true -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
 | 
			
		||||
{{/*
 | 
			
		||||
Generate argument list for mongodb-exporter
 | 
			
		||||
reference: https://github.com/percona/mongodb_exporter/blob/main/REFERENCE.md
 | 
			
		||||
*/}}
 | 
			
		||||
{{- define "mongodb.exporterArgs" -}}
 | 
			
		||||
{{- with .Values.metrics.collector -}}
 | 
			
		||||
{{- ternary " --collect-all" "" .all -}}
 | 
			
		||||
{{- ternary " --collector.diagnosticdata" "" .diagnosticdata -}}
 | 
			
		||||
{{- ternary " --collector.replicasetstatus" "" .replicasetstatus -}}
 | 
			
		||||
{{- ternary " --collector.dbstats" "" .dbstats -}}
 | 
			
		||||
{{- ternary " --collector.topmetrics" "" .topmetrics -}}
 | 
			
		||||
{{- ternary " --collector.indexstats" "" .indexstats -}}
 | 
			
		||||
{{- ternary " --collector.collstats" "" .collstats -}}
 | 
			
		||||
{{- if .collstatsColls -}}
 | 
			
		||||
{{- " --mongodb.collstats-colls=" -}}
 | 
			
		||||
{{- join "," .collstatsColls -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- if .indexstatsColls -}}
 | 
			
		||||
{{- " --mongodb.indexstats-colls=" -}}
 | 
			
		||||
{{- join "," .indexstatsColls -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- $limitArg := print " --collector.collstats-limit=" .collstatsLimit -}}
 | 
			
		||||
{{- ne (print .collstatsLimit) "0" | ternary $limitArg "" -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- ternary " --compatible-mode" "" .Values.metrics.compatibleMode -}}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
							
								
								
									
										20
									
								
								opencloud/charts/mongodb/templates/arbiter/configmap.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								opencloud/charts/mongodb/templates/arbiter/configmap.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if (include "mongodb.arbiter.createConfigmap" .) }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: ConfigMap
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-arbiter" (include "mongodb.fullname" .) }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: arbiter
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
data:
 | 
			
		||||
  mongodb.conf: |-
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.configuration "context" $) | nindent 4 }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										31
									
								
								opencloud/charts/mongodb/templates/arbiter/headless-svc.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								opencloud/charts/mongodb/templates/arbiter/headless-svc.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if (include "mongodb.arbiter.enabled" .) }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.arbiter.service.nameOverride" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: arbiter
 | 
			
		||||
  {{- if or .Values.arbiter.service.headless.annotations .Values.commonAnnotations }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.arbiter.service.headless.annotations .Values.commonAnnotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  type: ClusterIP
 | 
			
		||||
  clusterIP: None
 | 
			
		||||
  ports:
 | 
			
		||||
    - name: tcp-mongodb
 | 
			
		||||
      port: {{ .Values.arbiter.service.ports.mongodb }}
 | 
			
		||||
      targetPort: mongodb
 | 
			
		||||
    {{- if .Values.arbiter.service.extraPorts }}
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.service.extraPorts "context" $) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.arbiter.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  selector: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: arbiter
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										28
									
								
								opencloud/charts/mongodb/templates/arbiter/pdb.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								opencloud/charts/mongodb/templates/arbiter/pdb.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and (include "mongodb.arbiter.enabled" .) .Values.arbiter.pdb.create }}
 | 
			
		||||
apiVersion: {{ include "common.capabilities.policy.apiVersion" . }}
 | 
			
		||||
kind: PodDisruptionBudget
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-arbiter" (include "mongodb.fullname" .) }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: arbiter
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  {{- if .Values.arbiter.pdb.minAvailable }}
 | 
			
		||||
  minAvailable: {{ .Values.arbiter.pdb.minAvailable }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if or .Values.arbiter.pdb.maxUnavailable (not .Values.arbiter.pdb.minAvailable) }}
 | 
			
		||||
  maxUnavailable: {{ .Values.arbiter.pdb.maxUnavailable | default 1 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.arbiter.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
 | 
			
		||||
      app.kubernetes.io/component: arbiter
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										321
									
								
								opencloud/charts/mongodb/templates/arbiter/statefulset.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										321
									
								
								opencloud/charts/mongodb/templates/arbiter/statefulset.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,321 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if (include "mongodb.arbiter.enabled" .) }}
 | 
			
		||||
apiVersion: {{ include "common.capabilities.statefulset.apiVersion" . }}
 | 
			
		||||
kind: StatefulSet
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-arbiter" (include "mongodb.fullname" .) }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  {{- $labels := include "common.tplvalues.merge" ( dict "values" ( list .Values.arbiter.labels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" $labels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: arbiter
 | 
			
		||||
  {{- if or .Values.arbiter.annotations .Values.commonAnnotations }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.arbiter.annotations .Values.commonAnnotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  serviceName: {{ include "mongodb.arbiter.service.nameOverride" . }}
 | 
			
		||||
  podManagementPolicy: {{ .Values.arbiter.podManagementPolicy }}
 | 
			
		||||
  replicas: 1
 | 
			
		||||
  {{- if .Values.arbiter.updateStrategy }}
 | 
			
		||||
  updateStrategy: {{- toYaml .Values.arbiter.updateStrategy | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.arbiter.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
 | 
			
		||||
      app.kubernetes.io/component: arbiter
 | 
			
		||||
  template:
 | 
			
		||||
    metadata:
 | 
			
		||||
      labels: {{- include "common.labels.standard" ( dict "customLabels" $podLabels "context" $ ) | nindent 8 }}
 | 
			
		||||
        app.kubernetes.io/component: arbiter
 | 
			
		||||
      {{- if or (include "mongodb.arbiter.createConfigmap" .) .Values.arbiter.podAnnotations .Values.passwordUpdateJob.enabled }}
 | 
			
		||||
      annotations:
 | 
			
		||||
        {{- if (include "mongodb.arbiter.createConfigmap" .) }}
 | 
			
		||||
        checksum/configuration: {{ include (print $.Template.BasePath "/arbiter/configmap.yaml") . | sha256sum }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.passwordUpdateJob.enabled }}
 | 
			
		||||
        charts.bitnami.com/password-last-update: {{ now | date "20060102150405" | quote }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.arbiter.podAnnotations }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.podAnnotations "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
    spec:
 | 
			
		||||
      {{- include "mongodb.imagePullSecrets" . | nindent 6 }}
 | 
			
		||||
      {{- if .Values.arbiter.schedulerName }}
 | 
			
		||||
      schedulerName: {{ .Values.arbiter.schedulerName | quote }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      serviceAccountName: {{ template "mongodb.serviceAccountName" . }}
 | 
			
		||||
      {{- if .Values.arbiter.affinity }}
 | 
			
		||||
      affinity: {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.affinity "context" $) | nindent 8 }}
 | 
			
		||||
      {{- else }}
 | 
			
		||||
      affinity:
 | 
			
		||||
        podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.arbiter.podAffinityPreset "component" "mongodb" "customLabels" $podLabels "topologyKey" .Values.topologyKey "context" $) | nindent 10 }}
 | 
			
		||||
        podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.arbiter.podAntiAffinityPreset "component" "mongodb" "customLabels" $podLabels "topologyKey" .Values.topologyKey "context" $) | nindent 10 }}
 | 
			
		||||
        nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.arbiter.nodeAffinityPreset.type "key" .Values.arbiter.nodeAffinityPreset.key "values" .Values.arbiter.nodeAffinityPreset.values) | nindent 10 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.arbiter.nodeSelector }}
 | 
			
		||||
      nodeSelector: {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.nodeSelector "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      automountServiceAccountToken: {{ .Values.arbiter.automountServiceAccountToken }}
 | 
			
		||||
      {{- if .Values.arbiter.hostAliases }}
 | 
			
		||||
      hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.hostAliases "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.arbiter.tolerations }}
 | 
			
		||||
      tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.tolerations "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.arbiter.topologySpreadConstraints }}
 | 
			
		||||
      topologySpreadConstraints: {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.topologySpreadConstraints "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.arbiter.priorityClassName }}
 | 
			
		||||
      priorityClassName: {{ .Values.arbiter.priorityClassName }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.arbiter.runtimeClassName }}
 | 
			
		||||
      runtimeClassName: {{ .Values.arbiter.runtimeClassName }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.arbiter.podSecurityContext.enabled }}
 | 
			
		||||
      securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.arbiter.podSecurityContext "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{ if .Values.arbiter.terminationGracePeriodSeconds }}
 | 
			
		||||
      terminationGracePeriodSeconds: {{ .Values.arbiter.terminationGracePeriodSeconds }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      enableServiceLinks: {{ .Values.enableServiceLinks }}
 | 
			
		||||
      initContainers:
 | 
			
		||||
        {{- if .Values.arbiter.initContainers }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.initContainers "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if and .Values.externalAccess.enabled ( or .Values.externalAccess.service.publicNames  .Values.externalAccess.service.domain ) }}
 | 
			
		||||
        {{- include "mongodb.initContainers.dnsCheck" . | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if and .Values.tls.enabled .Values.arbiter.enabled }}
 | 
			
		||||
        - name: generate-tls-certs
 | 
			
		||||
          image: {{ include "mongodb.tls.image" . }}
 | 
			
		||||
          imagePullPolicy: {{ .Values.tls.image.pullPolicy | quote }}
 | 
			
		||||
          env:
 | 
			
		||||
            - name: MY_POD_NAMESPACE
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.namespace
 | 
			
		||||
            - name: MY_POD_HOST_IP
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: status.hostIP
 | 
			
		||||
            - name: MY_POD_NAME
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.name
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /tmp
 | 
			
		||||
              subPath: tmp-dir
 | 
			
		||||
            {{- if (include "mongodb.autoGenerateCerts" .) }}
 | 
			
		||||
            - name: certs-volume
 | 
			
		||||
              mountPath: /certs/CAs
 | 
			
		||||
            {{- else }}
 | 
			
		||||
            - name: mongodb-certs-0
 | 
			
		||||
              mountPath: /certs-0
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: certs
 | 
			
		||||
              mountPath: /certs
 | 
			
		||||
            - name: common-scripts
 | 
			
		||||
              mountPath: /bitnami/scripts
 | 
			
		||||
          command:
 | 
			
		||||
            - /bitnami/scripts/generate-certs.sh
 | 
			
		||||
          args:
 | 
			
		||||
            - -s {{ include "mongodb.arbiter.service.nameOverride" . }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      containers:
 | 
			
		||||
        - name: mongodb-arbiter
 | 
			
		||||
          image: {{ include "mongodb.image" . }}
 | 
			
		||||
          imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
 | 
			
		||||
          {{- if .Values.arbiter.containerSecurityContext.enabled }}
 | 
			
		||||
          securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.arbiter.containerSecurityContext "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.arbiter.command }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.arbiter.args }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.arbiter.lifecycleHooks }}
 | 
			
		||||
          lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.lifecycleHooks "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          env:
 | 
			
		||||
            - name: BITNAMI_DEBUG
 | 
			
		||||
              value: {{ ternary "true" "false" (or .Values.image.debug .Values.diagnosticMode.enabled) | quote }}
 | 
			
		||||
            - name: MY_POD_NAME
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.name
 | 
			
		||||
            - name: MY_POD_NAMESPACE
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.namespace
 | 
			
		||||
            - name: MONGODB_REPLICA_SET_MODE
 | 
			
		||||
              value: "arbiter"
 | 
			
		||||
            - name: MONGODB_INITIAL_PRIMARY_HOST
 | 
			
		||||
              value: {{ include "mongodb.initialPrimaryHost" . | quote }}
 | 
			
		||||
            - name: MONGODB_REPLICA_SET_NAME
 | 
			
		||||
              value: {{ .Values.replicaSetName | quote }}
 | 
			
		||||
            - name: MONGODB_ADVERTISED_HOSTNAME
 | 
			
		||||
              value: "$(MY_POD_NAME).{{ include "mongodb.arbiter.service.nameOverride" . }}.$(MY_POD_NAMESPACE).svc.{{ .Values.clusterDomain }}"
 | 
			
		||||
            - name: MONGODB_PORT_NUMBER
 | 
			
		||||
              value: {{ .Values.arbiter.containerPorts.mongodb | quote }}
 | 
			
		||||
            - name: MONGODB_ENABLE_IPV6
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.enableIPv6 | quote }}
 | 
			
		||||
            {{- if .Values.auth.enabled }}
 | 
			
		||||
            - name: MONGODB_INITIAL_PRIMARY_ROOT_USER
 | 
			
		||||
              value: {{ .Values.auth.rootUser | quote }}
 | 
			
		||||
            - name: MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-root-password
 | 
			
		||||
            - name: MONGODB_REPLICA_SET_KEY
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-replica-set-key
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: ALLOW_EMPTY_PASSWORD
 | 
			
		||||
              value: {{ ternary "no" "yes" .Values.auth.enabled | quote }}
 | 
			
		||||
            {{- $extraFlags := .Values.arbiter.extraFlags | join " " -}}
 | 
			
		||||
            {{- if and .Values.tls.enabled .Values.arbiter.enabled  }}
 | 
			
		||||
              {{- if .Values.tls.mTLS.enabled }}
 | 
			
		||||
              {{- $extraFlags = printf "--tlsCAFile=/certs/mongodb-ca-cert %s" $extraFlags  }}
 | 
			
		||||
              {{- end }}
 | 
			
		||||
              {{- $extraFlags = printf "--tlsMode=%s --tlsCertificateKeyFile=/certs/mongodb.pem %s" .Values.tls.mode $extraFlags  }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if ne $extraFlags "" }}
 | 
			
		||||
            - name: MONGODB_EXTRA_FLAGS
 | 
			
		||||
              value: {{ $extraFlags | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if and .Values.tls.enabled  .Values.arbiter.enabled }}
 | 
			
		||||
            - name: MONGODB_CLIENT_EXTRA_FLAGS
 | 
			
		||||
              value: --tls {{ if .Values.tls.mTLS.enabled }}--tlsCertificateKeyFile=/certs/mongodb.pem {{ end }}--tlsCAFile=/certs/mongodb-ca-cert
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.arbiter.extraEnvVars }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.extraEnvVars "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- if or .Values.arbiter.extraEnvVarsCM .Values.arbiter.extraEnvVarsSecret }}
 | 
			
		||||
          envFrom:
 | 
			
		||||
            {{- if .Values.arbiter.extraEnvVarsCM }}
 | 
			
		||||
            - configMapRef:
 | 
			
		||||
                name: {{ tpl .Values.arbiter.extraEnvVarsCM . | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.arbiter.extraEnvVarsSecret }}
 | 
			
		||||
            - secretRef:
 | 
			
		||||
                name: {{ tpl .Values.arbiter.extraEnvVarsSecret . | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          ports:
 | 
			
		||||
            - containerPort: {{ .Values.arbiter.containerPorts.mongodb }}
 | 
			
		||||
              name: mongodb
 | 
			
		||||
          {{- if not .Values.diagnosticMode.enabled }}
 | 
			
		||||
          {{- if .Values.arbiter.customLivenessProbe }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.customLivenessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.arbiter.livenessProbe.enabled }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.arbiter.livenessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            exec:
 | 
			
		||||
              command:
 | 
			
		||||
                - pgrep
 | 
			
		||||
                - mongod
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.arbiter.customReadinessProbe }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.customReadinessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.arbiter.readinessProbe.enabled }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.arbiter.readinessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            tcpSocket:
 | 
			
		||||
              port: mongodb
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.arbiter.customStartupProbe }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.customStartupProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.arbiter.startupProbe.enabled }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.arbiter.startupProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            exec:
 | 
			
		||||
              command:
 | 
			
		||||
                - /bitnami/scripts/startup-probe.sh
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.arbiter.resources }}
 | 
			
		||||
          resources: {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.resources "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if ne .Values.arbiter.resourcesPreset "none" }}
 | 
			
		||||
          resources: {{- include "common.resources.preset" (dict "type" .Values.arbiter.resourcesPreset) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /tmp
 | 
			
		||||
              subPath: tmp-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/conf
 | 
			
		||||
              subPath: app-conf-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/tmp
 | 
			
		||||
              subPath: app-tmp-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/logs
 | 
			
		||||
              subPath: app-logs-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /bitnami/mongodb
 | 
			
		||||
              subPath: app-volume-dir
 | 
			
		||||
            {{- if or .Values.arbiter.configuration .Values.arbiter.existingConfigmap }}
 | 
			
		||||
            - name: config
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/conf/mongodb.conf
 | 
			
		||||
              subPath: mongodb.conf
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if and .Values.tls.enabled .Values.arbiter.enabled }}
 | 
			
		||||
            - name: certs
 | 
			
		||||
              mountPath: /certs
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.arbiter.extraVolumeMounts }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.extraVolumeMounts "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
        {{- if .Values.arbiter.sidecars }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.sidecars "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      volumes:
 | 
			
		||||
        - name: empty-dir
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
      {{- if or .Values.arbiter.configuration .Values.arbiter.existingConfigmap .Values.arbiter.extraVolumes .Values.tls.enabled }}
 | 
			
		||||
        - name: common-scripts
 | 
			
		||||
          configMap:
 | 
			
		||||
            name: {{ printf "%s-common-scripts" (include "mongodb.fullname" .) }}
 | 
			
		||||
            defaultMode: 0o555
 | 
			
		||||
        {{- if or .Values.arbiter.configuration .Values.arbiter.existingConfigmap }}
 | 
			
		||||
        - name: config
 | 
			
		||||
          configMap:
 | 
			
		||||
            name: {{ include "mongodb.arbiter.configmapName" . }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if and .Values.tls.enabled .Values.arbiter.enabled }}
 | 
			
		||||
        - name: certs
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
        {{- if (include "mongodb.autoGenerateCerts" .) }}
 | 
			
		||||
        - name: certs-volume
 | 
			
		||||
          secret:
 | 
			
		||||
            secretName: {{ template "mongodb.tlsSecretName" . }}
 | 
			
		||||
            items:
 | 
			
		||||
            - key: mongodb-ca-cert
 | 
			
		||||
              path: mongodb-ca-cert
 | 
			
		||||
              mode: 0o600
 | 
			
		||||
            - key: mongodb-ca-key
 | 
			
		||||
              path: mongodb-ca-key
 | 
			
		||||
              mode: 0o600
 | 
			
		||||
        {{- else }}
 | 
			
		||||
        - name: mongodb-certs-0
 | 
			
		||||
          secret:
 | 
			
		||||
            secretName: {{ include "common.tplvalues.render" ( dict "value" .Values.tls.arbiter.existingSecret "context" $) }}
 | 
			
		||||
            defaultMode: 256
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.arbiter.extraVolumes }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.arbiter.extraVolumes "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										215
									
								
								opencloud/charts/mongodb/templates/backup/cronjob.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								opencloud/charts/mongodb/templates/backup/cronjob.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,215 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if .Values.backup.enabled }}
 | 
			
		||||
apiVersion: batch/v1
 | 
			
		||||
kind: CronJob
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}-mongodump
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" . | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodump
 | 
			
		||||
    {{- if .Values.backup.cronjob.labels }}
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" .Values.backup.cronjob.labels "context" $) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- if .Values.commonLabels }}
 | 
			
		||||
    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- if or .Values.backup.cronjob.annotations .Values.commonAnnotations }}
 | 
			
		||||
  annotations:
 | 
			
		||||
    {{- if .Values.backup.cronjob.annotations }}
 | 
			
		||||
    {{- include "common.tplvalues.render" ( dict "value" .Values.backup.cronjob.annotations "context" $) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- if .Values.commonAnnotations }}
 | 
			
		||||
    {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  schedule: {{ quote .Values.backup.cronjob.schedule }}
 | 
			
		||||
  {{- if .Values.backup.cronjob.timezone }}
 | 
			
		||||
  timeZone: {{ .Values.backup.cronjob.timezone | quote }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  concurrencyPolicy: {{ .Values.backup.cronjob.concurrencyPolicy }}
 | 
			
		||||
  failedJobsHistoryLimit: {{ .Values.backup.cronjob.failedJobsHistoryLimit }}
 | 
			
		||||
  successfulJobsHistoryLimit: {{ .Values.backup.cronjob.successfulJobsHistoryLimit }}
 | 
			
		||||
  {{- if .Values.backup.cronjob.startingDeadlineSeconds }}
 | 
			
		||||
  startingDeadlineSeconds: {{ .Values.backup.cronjob.startingDeadlineSeconds }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  jobTemplate:
 | 
			
		||||
    spec:
 | 
			
		||||
      {{- if .Values.backup.cronjob.backoffLimit }}
 | 
			
		||||
      backoffLimit: {{ .Values.backup.cronjob.backoffLimit }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.backup.cronjob.ttlSecondsAfterFinished }}
 | 
			
		||||
      ttlSecondsAfterFinished: {{ .Values.backup.cronjob.ttlSecondsAfterFinished }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      template:
 | 
			
		||||
        metadata:
 | 
			
		||||
          labels: {{- include "common.labels.standard" . | nindent 12 }}
 | 
			
		||||
            app.kubernetes.io/component: mongodump
 | 
			
		||||
            {{- if .Values.backup.cronjob.labels }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.backup.cronjob.labels "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.commonLabels }}
 | 
			
		||||
            {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- if or .Values.backup.cronjob.annotations .Values.commonAnnotations }}
 | 
			
		||||
          annotations:
 | 
			
		||||
            {{- if .Values.backup.cronjob.annotations }}
 | 
			
		||||
            {{- include "common.tplvalues.render" ( dict "value" .Values.backup.cronjob.annotations "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.commonAnnotations }}
 | 
			
		||||
            {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
        spec:
 | 
			
		||||
          {{- include "mongodb.imagePullSecrets" . | nindent 10 }}
 | 
			
		||||
          {{- if .Values.podSecurityContext.enabled }}
 | 
			
		||||
          securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.podSecurityContext "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          enableServiceLinks: {{ .Values.enableServiceLinks }}
 | 
			
		||||
          {{- if .Values.tls.enabled }}
 | 
			
		||||
          initContainers:
 | 
			
		||||
            - name: generate-tls-certs
 | 
			
		||||
              image: {{ include "mongodb.tls.image" . }}
 | 
			
		||||
              imagePullPolicy: {{ .Values.tls.image.pullPolicy | quote }}
 | 
			
		||||
              env:
 | 
			
		||||
                - name: MY_POD_NAMESPACE
 | 
			
		||||
                  valueFrom:
 | 
			
		||||
                    fieldRef:
 | 
			
		||||
                      fieldPath: metadata.namespace
 | 
			
		||||
                - name: MY_POD_HOST_IP
 | 
			
		||||
                  valueFrom:
 | 
			
		||||
                    fieldRef:
 | 
			
		||||
                      fieldPath: status.hostIP
 | 
			
		||||
              volumeMounts:
 | 
			
		||||
                - name: empty-dir
 | 
			
		||||
                  mountPath: /tmp
 | 
			
		||||
                  subPath: tmp-dir
 | 
			
		||||
                {{- if (include "mongodb.autoGenerateCerts" .) }}
 | 
			
		||||
                - name: certs-volume
 | 
			
		||||
                  mountPath: /certs/CAs
 | 
			
		||||
                {{- else }}
 | 
			
		||||
                - name: mongodb-certs-0
 | 
			
		||||
                  mountPath: /certs-0
 | 
			
		||||
                {{- end }}
 | 
			
		||||
                - name: certs
 | 
			
		||||
                  mountPath: /certs
 | 
			
		||||
                - name: common-scripts
 | 
			
		||||
                  mountPath: /bitnami/scripts
 | 
			
		||||
              command:
 | 
			
		||||
                - /bitnami/scripts/generate-certs.sh
 | 
			
		||||
              args:
 | 
			
		||||
                - -s {{ include "mongodb.service.nameOverride" . }}
 | 
			
		||||
                {{- if .Values.externalAccess.service.loadBalancerIPs }}
 | 
			
		||||
                - -i {{ join "," .Values.externalAccess.service.loadBalancerIPs }}
 | 
			
		||||
                {{- end }}
 | 
			
		||||
                {{- if or .Values.tls.extraDnsNames .Values.externalAccess.service.publicNames }}
 | 
			
		||||
                - -n {{ join "," ( concat .Values.tls.extraDnsNames .Values.externalAccess.service.publicNames ) }}
 | 
			
		||||
                {{- end }}
 | 
			
		||||
              {{- if .Values.tls.resources }}
 | 
			
		||||
              resources: {{- include "common.tplvalues.render" (dict "value" .Values.tls.resources "context" $) | nindent 12 }}
 | 
			
		||||
              {{- else if ne .Values.tls.resourcesPreset "none" }}
 | 
			
		||||
              resources: {{- include "common.resources.preset" (dict "type" .Values.tls.resourcesPreset) | nindent 16 }}
 | 
			
		||||
              {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          containers:
 | 
			
		||||
          - name: {{ include "mongodb.fullname" . }}-mongodump
 | 
			
		||||
            image: {{ include "mongodb.image" . }}
 | 
			
		||||
            imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
 | 
			
		||||
            env:
 | 
			
		||||
            {{- if .Values.auth.enabled }}
 | 
			
		||||
              - name: MONGODB_ROOT_USER
 | 
			
		||||
                value: {{ .Values.auth.rootUser | quote }}
 | 
			
		||||
              - name: MONGODB_ROOT_PASSWORD
 | 
			
		||||
                valueFrom:
 | 
			
		||||
                  secretKeyRef:
 | 
			
		||||
                    name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                    key: mongodb-root-password
 | 
			
		||||
            {{- end }}
 | 
			
		||||
              - name: MONGODB_SERVICE_NAME
 | 
			
		||||
                value: {{ include "mongodb.service.nameOverride" . }}
 | 
			
		||||
              - name: MONGODB_PORT_NUMBER
 | 
			
		||||
                value: {{ .Values.containerPorts.mongodb | quote }}
 | 
			
		||||
              - name: MONGODUMP_DIR
 | 
			
		||||
                value: {{ .Values.backup.cronjob.storage.mountPath }}
 | 
			
		||||
              {{- if .Values.tls.enabled }}
 | 
			
		||||
              - name: MONGODB_CLIENT_EXTRA_FLAGS
 | 
			
		||||
                value: --ssl --sslPEMKeyFile=/certs/mongodb.pem --sslCAFile=/certs/mongodb-ca-cert
 | 
			
		||||
              {{- end }}
 | 
			
		||||
            {{- if .Values.backup.cronjob.command }}
 | 
			
		||||
            command: {{- include "common.tplvalues.render" (dict "value" .Values.backup.cronjob.command "context" $) | nindent 14 }}
 | 
			
		||||
            {{- else }}
 | 
			
		||||
            command:
 | 
			
		||||
              - /bin/sh
 | 
			
		||||
              - -c
 | 
			
		||||
              - "mongodump {{- if .Values.auth.enabled }} --username=${MONGODB_ROOT_USER} --password=${MONGODB_ROOT_PASSWORD} --authenticationDatabase=admin {{- end }} --host=${MONGODB_SERVICE_NAME} --port=${MONGODB_PORT_NUMBER} ${MONGODB_CLIENT_EXTRA_FLAGS} {{- if (eq $.Values.architecture "replicaset") }}--oplog{{- end }} --gzip --archive=${MONGODUMP_DIR}/mongodump-$(date '+%Y-%m-%d-%H-%M').gz"
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.backup.cronjob.resources }}
 | 
			
		||||
            resources: {{- include "common.tplvalues.render" (dict "value" .Values.backup.cronjob.resources "context" $) | nindent 14 }}
 | 
			
		||||
            {{- else if ne .Values.backup.cronjob.resourcesPreset "none" }}
 | 
			
		||||
            resources: {{- include "common.resources.preset" (dict "type" .Values.backup.cronjob.resourcesPreset) | nindent 14 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            volumeMounts:
 | 
			
		||||
              - name: empty-dir
 | 
			
		||||
                mountPath: /tmp
 | 
			
		||||
                subPath: tmp-dir
 | 
			
		||||
              {{- if .Values.tls.enabled }}
 | 
			
		||||
              - name: certs
 | 
			
		||||
                mountPath: /certs
 | 
			
		||||
              {{- if (include "mongodb.autoGenerateCerts" .) }}
 | 
			
		||||
              - name: certs-volume
 | 
			
		||||
                mountPath: /certs/CAs
 | 
			
		||||
              {{- else }}
 | 
			
		||||
              - name: mongodb-certs-0
 | 
			
		||||
                mountPath: /certs-0
 | 
			
		||||
              {{- end }}
 | 
			
		||||
              {{- end }}
 | 
			
		||||
              - name: datadir
 | 
			
		||||
                mountPath: {{ .Values.backup.cronjob.storage.mountPath }}
 | 
			
		||||
                subPath: {{ .Values.backup.cronjob.storage.subPath }}
 | 
			
		||||
            {{- if .Values.backup.cronjob.containerSecurityContext.enabled }}
 | 
			
		||||
            securityContext:
 | 
			
		||||
              {{- include "common.tplvalues.render" ( dict "value" ( omit .Values.backup.cronjob.containerSecurityContext "enabled" ) "context" $) | nindent 14 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          restartPolicy: {{ .Values.backup.cronjob.restartPolicy }}
 | 
			
		||||
          volumes:
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              emptyDir: {}
 | 
			
		||||
            - name: common-scripts
 | 
			
		||||
              configMap:
 | 
			
		||||
                name: {{ printf "%s-common-scripts" (include "mongodb.fullname" .) }}
 | 
			
		||||
                defaultMode: 0o550
 | 
			
		||||
            {{- if .Values.tls.enabled }}
 | 
			
		||||
            - name: certs
 | 
			
		||||
              emptyDir: {}
 | 
			
		||||
            {{- if (include "mongodb.autoGenerateCerts" .) }}
 | 
			
		||||
            - name: certs-volume
 | 
			
		||||
              secret:
 | 
			
		||||
                secretName: {{ template "mongodb.tlsSecretName" . }}
 | 
			
		||||
                items:
 | 
			
		||||
                - key: mongodb-ca-cert
 | 
			
		||||
                  path: mongodb-ca-cert
 | 
			
		||||
                  mode: 0o600
 | 
			
		||||
                - key: mongodb-ca-key
 | 
			
		||||
                  path: mongodb-ca-key
 | 
			
		||||
                  mode: 0o600
 | 
			
		||||
            {{- else }}
 | 
			
		||||
            - name: mongodb-certs-0
 | 
			
		||||
              secret:
 | 
			
		||||
                secretName: {{ include "common.tplvalues.render" ( dict "value" .Values.tls.standalone.existingSecret "context" $) }}
 | 
			
		||||
                defaultMode: 256
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.backup.cronjob.storage.existingClaim }}
 | 
			
		||||
            - name: datadir
 | 
			
		||||
              persistentVolumeClaim:
 | 
			
		||||
                claimName: {{ printf "%s" (tpl .Values.backup.cronjob.storage.existingClaim .) }}
 | 
			
		||||
            {{- else }}
 | 
			
		||||
            - name: datadir
 | 
			
		||||
              persistentVolumeClaim:
 | 
			
		||||
                claimName: {{ include "mongodb.fullname" . }}-mongodump
 | 
			
		||||
            {{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										41
									
								
								opencloud/charts/mongodb/templates/backup/pvc.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								opencloud/charts/mongodb/templates/backup/pvc.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and .Values.backup.enabled (not .Values.backup.cronjob.storage.existingClaim) -}}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: PersistentVolumeClaim
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}-mongodump
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" . | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodump
 | 
			
		||||
    {{- if .Values.backup.cronjob.labels }}
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" .Values.backup.cronjob.labels "context" $) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- if .Values.commonLabels }}
 | 
			
		||||
    {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- if or .Values.backup.cronjob.annotations .Values.commonAnnotations .Values.backup.cronjob.storage.resourcePolicy}}
 | 
			
		||||
  annotations:
 | 
			
		||||
    {{- if .Values.backup.cronjob.annotations }}
 | 
			
		||||
    {{- include "common.tplvalues.render" ( dict "value" .Values.backup.cronjob.annotations "context" $) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- if .Values.commonAnnotations }}
 | 
			
		||||
    {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- if .Values.backup.cronjob.storage.resourcePolicy }}
 | 
			
		||||
    helm.sh/resource-policy: {{ .Values.backup.cronjob.storage.resourcePolicy | quote }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  accessModes:
 | 
			
		||||
  {{- range .Values.backup.cronjob.storage.accessModes }}
 | 
			
		||||
    - {{ . | quote }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  resources:
 | 
			
		||||
    requests:
 | 
			
		||||
      storage: {{ .Values.backup.cronjob.storage.size | quote }}
 | 
			
		||||
  {{ include "common.storage.class" (dict "persistence" .Values.backup.cronjob.storage "global" .Values.global) | nindent 2 }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										143
									
								
								opencloud/charts/mongodb/templates/common-scripts-cm.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								opencloud/charts/mongodb/templates/common-scripts-cm.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,143 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: ConfigMap
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-common-scripts" (include "mongodb.fullname" .) }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
data:
 | 
			
		||||
  {{- $fullname := include "mongodb.fullname" . }}
 | 
			
		||||
  startup-probe.sh: |
 | 
			
		||||
    #!/bin/bash
 | 
			
		||||
    {{- if .Values.tls.enabled }}
 | 
			
		||||
    # Probes are using localhost/127.0.0.1 to tests if the service is up, ready or healthy. If TLS is enabled, we shouldn't validate the certificate hostname.
 | 
			
		||||
    TLS_OPTIONS='--tls {{ if .Values.tls.mTLS.enabled }}--tlsCertificateKeyFile=/certs/mongodb.pem {{ end }}--tlsCAFile=/certs/mongodb-ca-cert --tlsAllowInvalidHostnames'
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    exec mongosh  $TLS_OPTIONS --port $MONGODB_PORT_NUMBER --eval 'if (!(db.hello().isWritablePrimary || db.hello().secondary)) { throw new Error("Not ready") }'
 | 
			
		||||
  readiness-probe.sh: |
 | 
			
		||||
    #!/bin/bash
 | 
			
		||||
    {{- if .Values.tls.enabled }}
 | 
			
		||||
    # Probes are using localhost/127.0.0.1 to tests if the service is up, ready or healthy. If TLS is enabled, we shouldn't validate the certificate hostname.
 | 
			
		||||
    TLS_OPTIONS='--tls {{ if .Values.tls.mTLS.enabled }}--tlsCertificateKeyFile=/certs/mongodb.pem {{ end }}--tlsCAFile=/certs/mongodb-ca-cert --tlsAllowInvalidHostnames'
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    # Run the proper check depending on the version
 | 
			
		||||
    [[ $(mongod -version | grep "db version") =~ ([0-9]+\.[0-9]+\.[0-9]+) ]] && VERSION=${BASH_REMATCH[1]}
 | 
			
		||||
    . /opt/bitnami/scripts/libversion.sh
 | 
			
		||||
    VERSION_MAJOR="$(get_sematic_version "$VERSION" 1)"
 | 
			
		||||
    VERSION_MINOR="$(get_sematic_version "$VERSION" 2)"
 | 
			
		||||
    VERSION_PATCH="$(get_sematic_version "$VERSION" 3)"
 | 
			
		||||
    readiness_test='db.isMaster().ismaster || db.isMaster().secondary'
 | 
			
		||||
    if [[ ( "$VERSION_MAJOR" -ge 5 ) || ( "$VERSION_MAJOR" -ge 4 && "$VERSION_MINOR" -ge 4 && "$VERSION_PATCH" -ge 2 ) ]]; then
 | 
			
		||||
        readiness_test='db.hello().isWritablePrimary || db.hello().secondary'
 | 
			
		||||
    fi
 | 
			
		||||
    exec mongosh  $TLS_OPTIONS --port $MONGODB_PORT_NUMBER --eval "if (!(${readiness_test})) { throw new Error(\"Not ready\") }"
 | 
			
		||||
  ping-mongodb.sh: |
 | 
			
		||||
    #!/bin/bash
 | 
			
		||||
    {{- if .Values.tls.enabled }}
 | 
			
		||||
    # Probes are using localhost/127.0.0.1 to tests if the service is up, ready or healthy. If TLS is enabled, we shouldn't validate the certificate hostname.
 | 
			
		||||
    TLS_OPTIONS='--tls {{ if .Values.tls.mTLS.enabled }}--tlsCertificateKeyFile=/certs/mongodb.pem {{ end }}--tlsCAFile=/certs/mongodb-ca-cert --tlsAllowInvalidHostnames'
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    exec mongosh  $TLS_OPTIONS --port $MONGODB_PORT_NUMBER --eval "db.adminCommand('ping')"
 | 
			
		||||
  {{- if .Values.tls.enabled }}
 | 
			
		||||
  generate-certs.sh: |
 | 
			
		||||
    #!/bin/bash
 | 
			
		||||
    {{- if (include "mongodb.autoGenerateCerts" .) }}
 | 
			
		||||
    additional_ips=()
 | 
			
		||||
    additional_names=()
 | 
			
		||||
    while getopts "i:n:s:" flag
 | 
			
		||||
    do
 | 
			
		||||
        case "${flag}" in
 | 
			
		||||
            i) read -a additional_ips <<< ${OPTARG//,/ } ;;
 | 
			
		||||
            n) read -a additional_names <<< ${OPTARG//,/ } ;;
 | 
			
		||||
            s) svc=${OPTARG// /} ;;
 | 
			
		||||
            \?) exit 1 ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    my_hostname=$(hostname)
 | 
			
		||||
    cp /certs/CAs/* /certs/
 | 
			
		||||
    cat >/certs/openssl.cnf <<EOL
 | 
			
		||||
    [req]
 | 
			
		||||
    req_extensions = v3_req
 | 
			
		||||
    distinguished_name = req_distinguished_name
 | 
			
		||||
    [req_distinguished_name]
 | 
			
		||||
    [ v3_req ]
 | 
			
		||||
    basicConstraints = CA:FALSE
 | 
			
		||||
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
 | 
			
		||||
    subjectAltName = @alt_names
 | 
			
		||||
    [alt_names]
 | 
			
		||||
    DNS.1 = $svc
 | 
			
		||||
    DNS.2 = $my_hostname
 | 
			
		||||
    {{- if eq .Values.architecture "replicaset" }}
 | 
			
		||||
    DNS.3 = $my_hostname.$svc.$MY_POD_NAMESPACE.svc.{{ .Values.clusterDomain }}
 | 
			
		||||
    {{- else }}
 | 
			
		||||
    DNS.3 = $svc.$MY_POD_NAMESPACE.svc.{{ .Values.clusterDomain }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    EOL
 | 
			
		||||
    index=2
 | 
			
		||||
    for ip in "${additional_ips[@]}"; do
 | 
			
		||||
        cat >>/certs/openssl.cnf <<EOL
 | 
			
		||||
    IP.$index = $ip
 | 
			
		||||
    EOL
 | 
			
		||||
        ((index++))
 | 
			
		||||
    done;
 | 
			
		||||
    index=5
 | 
			
		||||
    for name in "${additional_names[@]}"; do
 | 
			
		||||
        cat >>/certs/openssl.cnf <<EOL
 | 
			
		||||
    DNS.$index = $(eval echo "${name}")
 | 
			
		||||
    EOL
 | 
			
		||||
        ((index++))
 | 
			
		||||
    done;
 | 
			
		||||
 | 
			
		||||
    export RANDFILE=/certs/.rnd && openssl genrsa -out /certs/mongo.key 2048
 | 
			
		||||
    #Create the client/server cert
 | 
			
		||||
    openssl req -new -key /certs/mongo.key -out /certs/mongo.csr -subj "/C=US/O=My Organisations/OU=IT/CN=$my_hostname" -config /certs/openssl.cnf
 | 
			
		||||
    #Signing the server cert with the CA cert and key
 | 
			
		||||
    openssl x509 -req -in /certs/mongo.csr -CA /certs/mongodb-ca-cert -CAkey /certs/mongodb-ca-key -CAcreateserial -out /certs/mongo.crt -days 3650 -extensions v3_req -extfile /certs/openssl.cnf
 | 
			
		||||
    rm /certs/mongo.csr
 | 
			
		||||
    #Concatenate to a pem file for use as the client PEM file which can be used for both member and client authentication.
 | 
			
		||||
    cat /certs/mongo.crt /certs/mongo.key > /certs/mongodb.pem
 | 
			
		||||
    cd /certs/
 | 
			
		||||
    shopt -s extglob
 | 
			
		||||
    rm -rf !(mongodb-ca-cert|mongodb.pem|CAs|openssl.cnf)
 | 
			
		||||
    chmod 0600 mongodb-ca-cert mongodb.pem
 | 
			
		||||
    {{- else }}
 | 
			
		||||
    {{- if eq .Values.architecture "standalone" }}
 | 
			
		||||
      ID="0"
 | 
			
		||||
    {{- else }}
 | 
			
		||||
    if [[ "$MY_POD_NAME" =~ "arbiter-0"$ ]]; then
 | 
			
		||||
      ID="0"
 | 
			
		||||
    elif [[ "$MY_POD_NAME" =~ "hidden-"[0-9]{1,}$ ]]; then
 | 
			
		||||
      ID="${MY_POD_NAME#"{{ printf "%s-hidden-" $fullname }}"}"
 | 
			
		||||
    else
 | 
			
		||||
      ID="${MY_POD_NAME#"{{ $fullname }}-"}"
 | 
			
		||||
    fi
 | 
			
		||||
    {{- end }}
 | 
			
		||||
 | 
			
		||||
    {{- if .Values.tls.pemChainIncluded }}
 | 
			
		||||
    #Split the pem chain by the END CERTIFICATE string and store in files /certs/xx00, /certs/xx01 etc.
 | 
			
		||||
    cat /certs-${ID}/tls.crt | csplit - -s -z '/\-*END CERTIFICATE\-*/+1' '{*}' -f /certs/xx
 | 
			
		||||
 | 
			
		||||
    #Use first certificate as leaf node and combine with key to store in pem file
 | 
			
		||||
    cat "/certs/xx00" "/certs-${ID}/tls.key" > "/certs/mongodb.pem"
 | 
			
		||||
 | 
			
		||||
    #Use remaining intermediate certificates for ca.crt
 | 
			
		||||
    echo $(find /certs/ -not -name 'xx00' -name 'xx*') | sort | xargs cat > "/certs/mongodb-ca-cert"
 | 
			
		||||
 | 
			
		||||
    rm -rf /certs/xx*
 | 
			
		||||
    {{- else }}
 | 
			
		||||
    cat "/certs-${ID}/tls.crt" "/certs-${ID}/tls.key" > "/certs/mongodb.pem"
 | 
			
		||||
    cp "/certs-${ID}/ca.crt" "/certs/mongodb-ca-cert"
 | 
			
		||||
    {{- end }}
 | 
			
		||||
 | 
			
		||||
    chmod 0600 /certs/mongodb-ca-cert /certs/mongodb.pem
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
							
								
								
									
										20
									
								
								opencloud/charts/mongodb/templates/configmap.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								opencloud/charts/mongodb/templates/configmap.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if (include "mongodb.createConfigmap" .) }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: ConfigMap
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
data:
 | 
			
		||||
  mongodb.conf: |-
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" .Values.configuration "context" $) | nindent 4 }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										9
									
								
								opencloud/charts/mongodb/templates/extra-list.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								opencloud/charts/mongodb/templates/extra-list.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- range .Values.extraDeploy }}
 | 
			
		||||
---
 | 
			
		||||
{{ include "common.tplvalues.render" (dict "value" . "context" $) }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										20
									
								
								opencloud/charts/mongodb/templates/hidden/configmap.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								opencloud/charts/mongodb/templates/hidden/configmap.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if (include "mongodb.hidden.createConfigmap" .) }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: ConfigMap
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-hidden" (include "mongodb.fullname" .) }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: hidden
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
data:
 | 
			
		||||
  mongodb.conf: |-
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" .Values.hidden.configuration "context" $) | nindent 4 }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
@@ -0,0 +1,69 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and (include "mongodb.hidden.enabled" .) .Values.externalAccess.hidden.enabled }}
 | 
			
		||||
{{- $fullName := include "mongodb.fullname" . }}
 | 
			
		||||
{{- $replicaCount := .Values.hidden.replicaCount | int }}
 | 
			
		||||
{{- $root := . }}
 | 
			
		||||
 | 
			
		||||
{{- range $i, $e := until $replicaCount }}
 | 
			
		||||
{{- $targetPod := printf "%s-hidden-%d" (printf "%s" $fullName) $i }}
 | 
			
		||||
{{- $_ := set $ "targetPod" $targetPod }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-hidden-%d-external" $fullName $i }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" $ }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" $root.Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: hidden
 | 
			
		||||
    pod: {{ $targetPod }}
 | 
			
		||||
  {{- if or $root.Values.externalAccess.hidden.service.annotations $root.Values.commonAnnotations }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list $root.Values.externalAccess.hidden.service.annotations $root.Values.commonAnnotations ) "context" $ ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  type: {{ $root.Values.externalAccess.hidden.service.type }}
 | 
			
		||||
  {{- if eq $root.Values.externalAccess.hidden.service.type "LoadBalancer" }}
 | 
			
		||||
  {{- if not (empty $root.Values.externalAccess.hidden.service.loadBalancerIPs) }}
 | 
			
		||||
  loadBalancerIP: {{ index $root.Values.externalAccess.hidden.service.loadBalancerIPs $i }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if $root.Values.externalAccess.hidden.service.loadBalancerClass }}
 | 
			
		||||
  loadBalancerClass: {{ $root.Values.externalAccess.hidden.service.loadBalancerClass }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if $root.Values.externalAccess.hidden.service.loadBalancerSourceRanges }}
 | 
			
		||||
  loadBalancerSourceRanges: {{- toYaml $root.Values.externalAccess.hidden.service.loadBalancerSourceRanges | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  allocateLoadBalancerNodePorts: {{ $root.Values.externalAccess.hidden.service.allocateLoadBalancerNodePorts }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if (or (eq $root.Values.externalAccess.hidden.service.type "LoadBalancer") (eq $root.Values.externalAccess.hidden.service.type "NodePort")) }}
 | 
			
		||||
  externalTrafficPolicy: {{ $root.Values.externalAccess.hidden.service.externalTrafficPolicy | quote }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if $root.Values.externalAccess.hidden.service.sessionAffinity }}
 | 
			
		||||
  sessionAffinity: {{ $root.Values.externalAccess.hidden.service.sessionAffinity }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if $root.Values.externalAccess.hidden.service.sessionAffinityConfig }}
 | 
			
		||||
  sessionAffinityConfig: {{- include "common.tplvalues.render" (dict "value" $root.Values.externalAccess.hidden.service.sessionAffinityConfig "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  publishNotReadyAddresses: true
 | 
			
		||||
  ports:
 | 
			
		||||
    - name: {{ $root.Values.externalAccess.hidden.service.portName | quote }}
 | 
			
		||||
      port: {{ $root.Values.externalAccess.hidden.service.ports.mongodb }}
 | 
			
		||||
      {{- if not (empty $root.Values.externalAccess.hidden.service.nodePorts) }}
 | 
			
		||||
      {{- $nodePort := index $root.Values.externalAccess.hidden.service.nodePorts $i }}
 | 
			
		||||
      nodePort: {{ $nodePort }}
 | 
			
		||||
      {{- else }}
 | 
			
		||||
      nodePort: null
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      targetPort: mongodb
 | 
			
		||||
    {{- if $root.Values.externalAccess.hidden.service.extraPorts }}
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" $root.Values.externalAccess.hidden.service.extraPorts "context" $) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list $root.Values.hidden.podLabels $root.Values.commonLabels ) "context" $ ) }}
 | 
			
		||||
  selector: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: hidden
 | 
			
		||||
    statefulset.kubernetes.io/pod-name: {{ $targetPod }}
 | 
			
		||||
---
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										32
									
								
								opencloud/charts/mongodb/templates/hidden/headless-svc.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								opencloud/charts/mongodb/templates/hidden/headless-svc.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if (include "mongodb.hidden.enabled" .) }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.hidden.service.nameOverride" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: hidden
 | 
			
		||||
  {{- if or .Values.hidden.service.headless.annotations .Values.commonAnnotations }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.hidden.service.headless.annotations .Values.commonAnnotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  type: ClusterIP
 | 
			
		||||
  clusterIP: None
 | 
			
		||||
  publishNotReadyAddresses: true
 | 
			
		||||
  ports:
 | 
			
		||||
    - name: {{ .Values.hidden.service.portName | quote }}
 | 
			
		||||
      port: {{ .Values.hidden.service.ports.mongodb }}
 | 
			
		||||
      targetPort: mongodb
 | 
			
		||||
    {{- if .Values.hidden.service.extraPorts }}
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" .Values.hidden.service.extraPorts "context" $) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.hidden.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  selector: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: hidden
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										28
									
								
								opencloud/charts/mongodb/templates/hidden/pdb.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								opencloud/charts/mongodb/templates/hidden/pdb.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and (include "mongodb.hidden.enabled" .) .Values.hidden.pdb.create }}
 | 
			
		||||
apiVersion: {{ include "common.capabilities.policy.apiVersion" . }}
 | 
			
		||||
kind: PodDisruptionBudget
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-hidden" (include "mongodb.fullname" . )}}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: hidden
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  {{- if .Values.hidden.pdb.minAvailable }}
 | 
			
		||||
  minAvailable: {{ .Values.hidden.pdb.minAvailable }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if or .Values.hidden.pdb.maxUnavailable (not .Values.hidden.pdb.minAvailable) }}
 | 
			
		||||
  maxUnavailable: {{ .Values.hidden.pdb.maxUnavailable | default 1 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.hidden.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
 | 
			
		||||
      app.kubernetes.io/component: hidden
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										554
									
								
								opencloud/charts/mongodb/templates/hidden/statefulset.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										554
									
								
								opencloud/charts/mongodb/templates/hidden/statefulset.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,554 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if (include "mongodb.hidden.enabled" .) }}
 | 
			
		||||
{{- $replicaCount := int .Values.hidden.replicaCount }}
 | 
			
		||||
{{- $loadBalancerIPListLength := len .Values.externalAccess.hidden.service.loadBalancerIPs }}
 | 
			
		||||
{{- if not (and .Values.externalAccess.hidden.enabled (not .Values.externalAccess.autoDiscovery.enabled) (not (eq $replicaCount $loadBalancerIPListLength )) (eq .Values.externalAccess.hidden.service.type "LoadBalancer")) }}
 | 
			
		||||
apiVersion: {{ include "common.capabilities.statefulset.apiVersion" . }}
 | 
			
		||||
kind: StatefulSet
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-hidden" (include "mongodb.fullname" .) }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  {{- $labels := include "common.tplvalues.merge" ( dict "values" ( list .Values.hidden.labels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" $labels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: hidden
 | 
			
		||||
  {{- if or .Values.hidden.annotations .Values.commonAnnotations }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.hidden.annotations .Values.commonAnnotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  serviceName: {{ include "mongodb.hidden.service.nameOverride" . }}
 | 
			
		||||
  podManagementPolicy: {{ .Values.hidden.podManagementPolicy }}
 | 
			
		||||
  replicas: {{ .Values.hidden.replicaCount }}
 | 
			
		||||
  {{- if .Values.hidden.updateStrategy }}
 | 
			
		||||
  updateStrategy: {{- toYaml .Values.hidden.updateStrategy | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.hidden.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
 | 
			
		||||
      app.kubernetes.io/component: hidden
 | 
			
		||||
  template:
 | 
			
		||||
    metadata:
 | 
			
		||||
      labels: {{- include "common.labels.standard" ( dict "customLabels" $podLabels "context" $ ) | nindent 8 }}
 | 
			
		||||
        app.kubernetes.io/component: hidden
 | 
			
		||||
      {{- if or (include "mongodb.hidden.createConfigmap" .) .Values.hidden.podAnnotations .Values.passwordUpdateJob.enabled }}
 | 
			
		||||
      annotations:
 | 
			
		||||
        {{- if (include "mongodb.hidden.createConfigmap" .) }}
 | 
			
		||||
        checksum/configuration: {{ include (print $.Template.BasePath "/hidden/configmap.yaml") . | sha256sum }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.passwordUpdateJob.enabled }}
 | 
			
		||||
        charts.bitnami.com/password-last-update: {{ now | date "20060102150405" | quote }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.hidden.podAnnotations }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.hidden.podAnnotations "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
    spec:
 | 
			
		||||
      {{- include "mongodb.imagePullSecrets" . | nindent 6 }}
 | 
			
		||||
      {{- if .Values.hidden.schedulerName }}
 | 
			
		||||
      schedulerName: {{ .Values.hidden.schedulerName | quote }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      serviceAccountName: {{ template "mongodb.serviceAccountName" . }}
 | 
			
		||||
      automountServiceAccountToken: {{ .Values.hidden.automountServiceAccountToken }}
 | 
			
		||||
      {{- if .Values.hidden.hostAliases }}
 | 
			
		||||
      hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.hostAliases "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.hidden.affinity }}
 | 
			
		||||
      affinity: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.affinity "context" $) | nindent 8 }}
 | 
			
		||||
      {{- else }}
 | 
			
		||||
      affinity:
 | 
			
		||||
        podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.hidden.podAffinityPreset "component" "hidden" "customLabels" $podLabels "topologyKey" .Values.topologyKey "context" $) | nindent 10 }}
 | 
			
		||||
        podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.hidden.podAntiAffinityPreset "component" "hidden" "customLabels" $podLabels "topologyKey" .Values.topologyKey "context" $) | nindent 10 }}
 | 
			
		||||
        nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.hidden.nodeAffinityPreset.type "key" .Values.hidden.nodeAffinityPreset.key "values" .Values.hidden.nodeAffinityPreset.values) | nindent 10 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.hidden.nodeSelector }}
 | 
			
		||||
      nodeSelector: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.nodeSelector "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.hidden.tolerations }}
 | 
			
		||||
      tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.tolerations "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.hidden.topologySpreadConstraints }}
 | 
			
		||||
      topologySpreadConstraints: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.topologySpreadConstraints "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.hidden.priorityClassName }}
 | 
			
		||||
      priorityClassName: {{ .Values.hidden.priorityClassName }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.hidden.runtimeClassName }}
 | 
			
		||||
      runtimeClassName: {{ .Values.hidden.runtimeClassName }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.hidden.podSecurityContext.enabled }}
 | 
			
		||||
      securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.hidden.podSecurityContext "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{ if .Values.hidden.terminationGracePeriodSeconds }}
 | 
			
		||||
      terminationGracePeriodSeconds: {{ .Values.hidden.terminationGracePeriodSeconds }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      enableServiceLinks: {{ .Values.enableServiceLinks }}
 | 
			
		||||
      initContainers:
 | 
			
		||||
        {{- if .Values.hidden.initContainers }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.hidden.initContainers "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if and .Values.volumePermissions.enabled .Values.hidden.persistence.enabled }}
 | 
			
		||||
        {{- include "mongodb.initContainer.volumePermissions" . | indent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if and .Values.externalAccess.hidden.enabled .Values.externalAccess.autoDiscovery.enabled (eq .Values.externalAccess.hidden.service.type "LoadBalancer") }}
 | 
			
		||||
        {{- include "mongodb.initContainers.autoDiscovery" . | indent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if and .Values.externalAccess.enabled ( or .Values.externalAccess.service.publicNames  .Values.externalAccess.service.domain ) }}
 | 
			
		||||
        {{- include "mongodb.initContainers.dnsCheck" . | indent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- include "mongodb.initContainer.prepareLogDir" . | nindent 8 }}
 | 
			
		||||
        {{- if .Values.tls.enabled }}
 | 
			
		||||
        - name: generate-tls-certs
 | 
			
		||||
          image: {{ include "mongodb.tls.image" . }}
 | 
			
		||||
          imagePullPolicy: {{ .Values.tls.image.pullPolicy | quote }}
 | 
			
		||||
          env:
 | 
			
		||||
            - name: MY_POD_NAMESPACE
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.namespace
 | 
			
		||||
            - name: MY_POD_HOST_IP
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: status.hostIP
 | 
			
		||||
            - name: MY_POD_NAME
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.name
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            {{- if (include "mongodb.autoGenerateCerts" .) }}
 | 
			
		||||
            - name: certs-volume
 | 
			
		||||
              mountPath: /certs/CAs
 | 
			
		||||
            {{- else }}
 | 
			
		||||
            {{- range $index, $_ := .Values.tls.hidden.existingSecrets }}
 | 
			
		||||
            - name: mongodb-certs-{{ $index }}
 | 
			
		||||
              mountPath: /certs-{{ $index }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: certs
 | 
			
		||||
              mountPath: /certs
 | 
			
		||||
            - name: common-scripts
 | 
			
		||||
              mountPath: /bitnami/scripts
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /tmp
 | 
			
		||||
              subPath: tmp-dir
 | 
			
		||||
          command:
 | 
			
		||||
            - /bitnami/scripts/generate-certs.sh
 | 
			
		||||
          args:
 | 
			
		||||
            - -s {{ include "mongodb.hidden.service.nameOverride" . }}
 | 
			
		||||
            {{- if .Values.externalAccess.hidden.service.loadBalancerIPs }}
 | 
			
		||||
            - -i {{ join "," .Values.externalAccess.hidden.service.loadBalancerIPs }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if or .Values.tls.extraDnsNames .Values.externalAccess.service.publicNames }}
 | 
			
		||||
            - -n {{ join "," ( concat  .Values.tls.extraDnsNames .Values.externalAccess.service.publicNames ) }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- if .Values.tls.resources }}
 | 
			
		||||
          resources: {{- include "common.tplvalues.render" (dict "value" .Values.tls.resources "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if ne .Values.tls.resourcesPreset "none" }}
 | 
			
		||||
          resources: {{- include "common.resources.preset" (dict "type" .Values.tls.resourcesPreset) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      containers:
 | 
			
		||||
        - name: mongodb
 | 
			
		||||
          image: {{ include "mongodb.image" . }}
 | 
			
		||||
          imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
 | 
			
		||||
          {{- if .Values.hidden.containerSecurityContext.enabled }}
 | 
			
		||||
          securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.hidden.containerSecurityContext "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.hidden.command }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else }}
 | 
			
		||||
          command:
 | 
			
		||||
            - /scripts/setup-hidden.sh
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.hidden.args }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.hidden.lifecycleHooks }}
 | 
			
		||||
          lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.lifecycleHooks "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          env:
 | 
			
		||||
            - name: BITNAMI_DEBUG
 | 
			
		||||
              value: {{ ternary "true" "false" (or .Values.image.debug .Values.diagnosticMode.enabled) | quote }}
 | 
			
		||||
            {{- if and .Values.externalAccess.hidden.enabled .Values.externalAccess.autoDiscovery.enabled (eq .Values.externalAccess.hidden.service.type "LoadBalancer") }}
 | 
			
		||||
            - name: SHARED_FILE
 | 
			
		||||
              value: "/shared/info.txt"
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: MY_POD_NAME
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.name
 | 
			
		||||
            - name: MY_POD_HOST_IP
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: status.hostIP
 | 
			
		||||
            - name: MY_POD_NAMESPACE
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.namespace
 | 
			
		||||
            - name: MONGODB_REPLICA_SET_MODE
 | 
			
		||||
              value: "hidden"
 | 
			
		||||
            - name: MONGODB_INITIAL_PRIMARY_HOST
 | 
			
		||||
              value: {{ include "mongodb.initialPrimaryHost" . | quote }}
 | 
			
		||||
            - name: MONGODB_REPLICA_SET_NAME
 | 
			
		||||
              value: {{ .Values.replicaSetName | quote }}
 | 
			
		||||
            {{- if and .Values.replicaSetHostnames (not .Values.externalAccess.hidden.enabled) }}
 | 
			
		||||
            - name: MONGODB_ADVERTISED_HOSTNAME
 | 
			
		||||
              value: "$(MY_POD_NAME).{{ include "mongodb.hidden.service.nameOverride" . }}.$(MY_POD_NAMESPACE).svc.{{ .Values.clusterDomain }}"
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- $customUsers := include "mongodb.customUsers" . -}}
 | 
			
		||||
            {{- $customDatabases := include "mongodb.customDatabases" . -}}
 | 
			
		||||
            {{- if not (empty $customUsers) }}
 | 
			
		||||
            - name: MONGODB_EXTRA_USERNAMES
 | 
			
		||||
              value: {{ $customUsers | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if not (empty $customDatabases) }}
 | 
			
		||||
            - name: MONGODB_EXTRA_DATABASES
 | 
			
		||||
              value: {{ $customDatabases | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.auth.enabled }}
 | 
			
		||||
            {{- if and (not (empty $customUsers)) (not (empty $customDatabases)) }}
 | 
			
		||||
            - name: MONGODB_EXTRA_PASSWORDS
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-passwords
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: MONGODB_ROOT_USER
 | 
			
		||||
              value: {{ .Values.auth.rootUser | quote }}
 | 
			
		||||
            - name: MONGODB_ROOT_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-root-password
 | 
			
		||||
            - name: MONGODB_REPLICA_SET_KEY
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-replica-set-key
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if and .Values.metrics.enabled (not (empty .Values.metrics.username)) }}
 | 
			
		||||
            - name: MONGODB_METRICS_USERNAME
 | 
			
		||||
              value: {{ .Values.metrics.username | quote }}
 | 
			
		||||
            {{- if .Values.auth.enabled }}
 | 
			
		||||
            - name: MONGODB_METRICS_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-metrics-password
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: ALLOW_EMPTY_PASSWORD
 | 
			
		||||
              value: {{ ternary "no" "yes" .Values.auth.enabled | quote }}
 | 
			
		||||
            - name: MONGODB_SYSTEM_LOG_VERBOSITY
 | 
			
		||||
              value: {{ .Values.systemLogVerbosity | quote }}
 | 
			
		||||
            - name: MONGODB_DISABLE_SYSTEM_LOG
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.disableSystemLog | quote }}
 | 
			
		||||
            - name: MONGODB_DISABLE_JAVASCRIPT
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.disableJavascript | quote }}
 | 
			
		||||
            - name: MONGODB_ENABLE_JOURNAL
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.enableJournal | quote }}
 | 
			
		||||
            - name: MONGODB_PORT_NUMBER
 | 
			
		||||
              value: {{ .Values.hidden.containerPorts.mongodb | quote }}
 | 
			
		||||
            - name: MONGODB_ENABLE_IPV6
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.enableIPv6 | quote }}
 | 
			
		||||
            - name: MONGODB_ENABLE_DIRECTORY_PER_DB
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.directoryPerDB | quote }}
 | 
			
		||||
            {{- $extraFlags := .Values.hidden.extraFlags | join " " -}}
 | 
			
		||||
            {{- if .Values.tls.enabled }}
 | 
			
		||||
              {{- if .Values.tls.mTLS.enabled }}
 | 
			
		||||
              {{- $extraFlags = printf "--tlsCAFile=/certs/mongodb-ca-cert %s" $extraFlags  }}
 | 
			
		||||
              {{- end }}
 | 
			
		||||
              {{- $extraFlags = printf "--tlsMode=%s --tlsCertificateKeyFile=/certs/mongodb.pem %s" .Values.tls.mode $extraFlags  }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if ne $extraFlags "" }}
 | 
			
		||||
            - name: MONGODB_EXTRA_FLAGS
 | 
			
		||||
              value: {{ $extraFlags | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.tls.enabled }}
 | 
			
		||||
            - name: MONGODB_CLIENT_EXTRA_FLAGS
 | 
			
		||||
              value: --tls {{ if .Values.tls.mTLS.enabled }}--tlsCertificateKeyFile=/certs/mongodb.pem {{ end }}--tlsCAFile=/certs/mongodb-ca-cert
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.hidden.extraEnvVars }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.hidden.extraEnvVars "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- if or .Values.hidden.extraEnvVarsCM .Values.hidden.extraEnvVarsSecret }}
 | 
			
		||||
          envFrom:
 | 
			
		||||
            {{- if .Values.hidden.extraEnvVarsCM }}
 | 
			
		||||
            - configMapRef:
 | 
			
		||||
                name: {{ tpl .Values.hidden.extraEnvVarsCM . | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.hidden.extraEnvVarsSecret }}
 | 
			
		||||
            - secretRef:
 | 
			
		||||
                name: {{ tpl .Values.hidden.extraEnvVarsSecret . | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          ports:
 | 
			
		||||
            - containerPort: {{ .Values.hidden.containerPorts.mongodb }}
 | 
			
		||||
              name: mongodb
 | 
			
		||||
          {{- if not .Values.diagnosticMode.enabled }}
 | 
			
		||||
          {{- if .Values.hidden.customLivenessProbe }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.customLivenessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.hidden.livenessProbe.enabled }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.hidden.livenessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            exec:
 | 
			
		||||
              command:
 | 
			
		||||
                - /bitnami/scripts/ping-mongodb.sh
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.hidden.customReadinessProbe }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.customReadinessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.hidden.readinessProbe.enabled }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.hidden.readinessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            exec:
 | 
			
		||||
              command:
 | 
			
		||||
                - /bitnami/scripts/readiness-probe.sh
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.hidden.customStartupProbe }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.customStartupProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.hidden.startupProbe.enabled }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.hidden.startupProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            exec:
 | 
			
		||||
              command:
 | 
			
		||||
                - /bitnami/scripts/startup-probe.sh
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.hidden.resources }}
 | 
			
		||||
          resources: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.resources "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if ne .Values.hidden.resourcesPreset "none" }}
 | 
			
		||||
          resources: {{- include "common.resources.preset" (dict "type" .Values.hidden.resourcesPreset) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            - name: datadir
 | 
			
		||||
              mountPath: {{ .Values.hidden.persistence.mountPath }}
 | 
			
		||||
              subPath: {{ .Values.hidden.persistence.subPath }}
 | 
			
		||||
            - name: common-scripts
 | 
			
		||||
              mountPath: /bitnami/scripts
 | 
			
		||||
            {{- if or .Values.initdbScriptsConfigMap .Values.initdbScripts }}
 | 
			
		||||
            - name: custom-init-scripts
 | 
			
		||||
              mountPath: /docker-entrypoint-initdb.d
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if or .Values.hidden.configuration .Values.hidden.existingConfigmap }}
 | 
			
		||||
            - name: config
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/conf/mongodb.conf
 | 
			
		||||
              subPath: mongodb.conf
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: scripts
 | 
			
		||||
              mountPath: /scripts/setup-hidden.sh
 | 
			
		||||
              subPath: setup-hidden.sh
 | 
			
		||||
            {{- if and .Values.externalAccess.hidden.enabled .Values.externalAccess.autoDiscovery.enabled (eq .Values.externalAccess.hidden.service.type "LoadBalancer") }}
 | 
			
		||||
            - name: shared
 | 
			
		||||
              mountPath: /shared
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.tls.enabled }}
 | 
			
		||||
            - name: certs
 | 
			
		||||
              mountPath: /certs
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /tmp
 | 
			
		||||
              subPath: tmp-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/conf
 | 
			
		||||
              subPath: app-conf-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/tmp
 | 
			
		||||
              subPath: app-tmp-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/logs
 | 
			
		||||
              subPath: app-logs-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /.mongodb
 | 
			
		||||
              subPath: mongosh-home
 | 
			
		||||
            {{- if .Values.hidden.extraVolumeMounts }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.hidden.extraVolumeMounts "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
        {{- if .Values.metrics.enabled }}
 | 
			
		||||
        - name: metrics
 | 
			
		||||
          image: {{ template "mongodb.metrics.image" . }}
 | 
			
		||||
          imagePullPolicy: {{ .Values.metrics.image.pullPolicy | quote }}
 | 
			
		||||
          {{- if .Values.containerSecurityContext.enabled }}
 | 
			
		||||
          securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.containerSecurityContext "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.command }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else }}
 | 
			
		||||
          command:
 | 
			
		||||
            - /bin/bash
 | 
			
		||||
            - -ec
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.args }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else }}
 | 
			
		||||
          args:
 | 
			
		||||
            - |
 | 
			
		||||
              /bin/mongodb_exporter {{ include "mongodb.exporterArgs" $ }} --mongodb.direct-connect --mongodb.global-conn-pool --mongodb.uri "{{ include "mongodb.mongodb_exporter.uri" . }}" {{ .Values.metrics.extraFlags }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          env:
 | 
			
		||||
            {{- if .Values.auth.enabled }}
 | 
			
		||||
            {{- if not .Values.metrics.username }}
 | 
			
		||||
            - name: MONGODB_ROOT_USER
 | 
			
		||||
              value: {{ .Values.auth.rootUser | quote }}
 | 
			
		||||
            - name: MONGODB_ROOT_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-root-password
 | 
			
		||||
            {{- else }}
 | 
			
		||||
            - name: MONGODB_METRICS_USERNAME
 | 
			
		||||
              value: {{ .Values.metrics.username | quote }}
 | 
			
		||||
            - name: MONGODB_METRICS_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-metrics-password
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /tmp
 | 
			
		||||
              subPath: tmp-dir
 | 
			
		||||
            {{- if .Values.tls.enabled }}
 | 
			
		||||
            - name: certs
 | 
			
		||||
              mountPath: /certs
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /opt/bitnami/redis-cluster/tmp
 | 
			
		||||
              subPath: app-tmp-dir
 | 
			
		||||
            {{- if .Values.metrics.extraVolumeMounts }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.metrics.extraVolumeMounts "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          ports:
 | 
			
		||||
            - name: metrics
 | 
			
		||||
              containerPort: 9216
 | 
			
		||||
          {{- if not .Values.diagnosticMode.enabled }}
 | 
			
		||||
          {{- if .Values.metrics.customLivenessProbe }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.customLivenessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.livenessProbe.enabled }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.metrics.livenessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            tcpSocket:
 | 
			
		||||
              port: metrics
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.metrics.customReadinessProbe }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.customReadinessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.readinessProbe.enabled }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.metrics.readinessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            httpGet:
 | 
			
		||||
              path: /
 | 
			
		||||
              port: metrics
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.metrics.customStartupProbe }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.customStartupProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.startupProbe.enabled }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.metrics.startupProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            tcpSocket:
 | 
			
		||||
              port: metrics
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.metrics.resources }}
 | 
			
		||||
          resources: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.resources "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if ne .Values.metrics.resourcesPreset "none" }}
 | 
			
		||||
          resources: {{- include "common.resources.preset" (dict "type" .Values.metrics.resourcesPreset) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.hidden.sidecars }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.hidden.sidecars "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      volumes:
 | 
			
		||||
        - name: empty-dir
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
        - name: common-scripts
 | 
			
		||||
          configMap:
 | 
			
		||||
            name: {{ printf "%s-common-scripts" (include "mongodb.fullname" .) }}
 | 
			
		||||
            defaultMode: 0o555
 | 
			
		||||
        {{- if or .Values.initdbScriptsConfigMap .Values.initdbScripts }}
 | 
			
		||||
        - name: custom-init-scripts
 | 
			
		||||
          configMap:
 | 
			
		||||
            name: {{ template "mongodb.initdbScriptsCM" . }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if or .Values.hidden.configuration .Values.hidden.existingConfigmap }}
 | 
			
		||||
        - name: config
 | 
			
		||||
          configMap:
 | 
			
		||||
            name: {{ include "mongodb.hidden.configmapName" . }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if and .Values.externalAccess.hidden.enabled .Values.externalAccess.autoDiscovery.enabled (eq .Values.externalAccess.hidden.service.type "LoadBalancer") }}
 | 
			
		||||
        - name: shared
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        - name: scripts
 | 
			
		||||
          configMap:
 | 
			
		||||
            name: {{ printf "%s-scripts" (include "mongodb.fullname" .) }}
 | 
			
		||||
            defaultMode: 0o755
 | 
			
		||||
        {{- if .Values.hidden.extraVolumes }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.hidden.extraVolumes "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.tls.enabled }}
 | 
			
		||||
        - name: certs
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
        {{- if (include "mongodb.autoGenerateCerts" .) }}
 | 
			
		||||
        - name: certs-volume
 | 
			
		||||
          secret:
 | 
			
		||||
            secretName: {{ template "mongodb.tlsSecretName" . }}
 | 
			
		||||
            items:
 | 
			
		||||
            - key: mongodb-ca-cert
 | 
			
		||||
              path: mongodb-ca-cert
 | 
			
		||||
              mode: 0o600
 | 
			
		||||
            - key: mongodb-ca-key
 | 
			
		||||
              path: mongodb-ca-key
 | 
			
		||||
              mode: 0o600
 | 
			
		||||
        {{- else }}
 | 
			
		||||
        {{- range $index, $secret := .Values.tls.hidden.existingSecrets }}
 | 
			
		||||
        - name: mongodb-certs-{{ $index }}
 | 
			
		||||
          secret:
 | 
			
		||||
            secretName: {{ include "common.tplvalues.render" ( dict "value" $secret "context" $) }}
 | 
			
		||||
            defaultMode: 256
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
  {{- if not .Values.hidden.persistence.enabled }}
 | 
			
		||||
        - name: datadir
 | 
			
		||||
          {{- if .Values.hidden.persistence.medium }}
 | 
			
		||||
          emptyDir:
 | 
			
		||||
            medium: {{ .Values.hidden.persistence.medium | quote }}
 | 
			
		||||
          {{- else }}
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
  {{- else }}
 | 
			
		||||
  volumeClaimTemplates:
 | 
			
		||||
    - metadata:
 | 
			
		||||
        name: datadir
 | 
			
		||||
        {{- if .Values.hidden.persistence.annotations }}
 | 
			
		||||
        annotations: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.persistence.annotations "context" $) | nindent 10 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.persistence.labels }}
 | 
			
		||||
        labels: {{- include "common.tplvalues.render" (dict "value" .Values.persistence.labels "context" $) | nindent 10 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      spec:
 | 
			
		||||
        accessModes:
 | 
			
		||||
        {{- range .Values.hidden.persistence.accessModes }}
 | 
			
		||||
          - {{ . | quote }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        resources:
 | 
			
		||||
          requests:
 | 
			
		||||
            storage: {{ .Values.hidden.persistence.size | quote }}
 | 
			
		||||
            {{- if .Values.hidden.persistence.volumeClaimTemplates.requests }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.hidden.persistence.volumeClaimTemplates.requests "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
        {{- if .Values.hidden.persistence.volumeClaimTemplates.dataSource }}
 | 
			
		||||
        dataSource: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.persistence.volumeClaimTemplates.dataSource "context" $) | nindent 10 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.hidden.persistence.volumeClaimTemplates.selector }}
 | 
			
		||||
        selector: {{- include "common.tplvalues.render" (dict "value" .Values.hidden.persistence.volumeClaimTemplates.selector "context" $) | nindent 10 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{ include "common.storage.class" (dict "persistence" .Values.hidden.persistence "global" .Values.global) }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
@@ -0,0 +1,19 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and .Values.initdbScripts (not .Values.initdbScriptsConfigMap) }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: ConfigMap
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-init-scripts" (include "mongodb.fullname" .) }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
data:
 | 
			
		||||
{{- include "common.tplvalues.render" (dict "value" .Values.initdbScripts "context" .) | nindent 2 }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										31
									
								
								opencloud/charts/mongodb/templates/metrics-svc.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								opencloud/charts/mongodb/templates/metrics-svc.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if .Values.metrics.enabled }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-metrics" (include "mongodb.fullname" .) }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: metrics
 | 
			
		||||
  {{- if or .Values.metrics.service.annotations .Values.commonAnnotations }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.metrics.service.annotations .Values.commonAnnotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  type: {{ .Values.metrics.service.type }}
 | 
			
		||||
  ports:
 | 
			
		||||
    - port: {{ .Values.metrics.service.ports.metrics }}
 | 
			
		||||
      targetPort: metrics
 | 
			
		||||
      protocol: TCP
 | 
			
		||||
      name: http-metrics
 | 
			
		||||
    {{- if .Values.metrics.service.extraPorts }}
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" .Values.metrics.service.extraPorts "context" $) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  selector: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										98
									
								
								opencloud/charts/mongodb/templates/networkpolicy.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								opencloud/charts/mongodb/templates/networkpolicy.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,98 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if .Values.networkPolicy.enabled }}
 | 
			
		||||
kind: NetworkPolicy
 | 
			
		||||
apiVersion: {{ include "common.capabilities.networkPolicy.apiVersion" . }}
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  namespace: {{ include "common.names.namespace" . | quote }}
 | 
			
		||||
  {{- $labels := include "common.tplvalues.merge" ( dict "values" ( list .Values.labels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" $labels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if or .Values.annotations .Values.commonAnnotation }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.annotations .Values.commonAnnotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  podSelector:
 | 
			
		||||
    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
 | 
			
		||||
      app.kubernetes.io/component: mongodb
 | 
			
		||||
  policyTypes:
 | 
			
		||||
    - Ingress
 | 
			
		||||
    - Egress
 | 
			
		||||
  {{- if .Values.networkPolicy.allowExternalEgress }}
 | 
			
		||||
  egress:
 | 
			
		||||
    - {}
 | 
			
		||||
  {{- else }}
 | 
			
		||||
  egress:
 | 
			
		||||
    # Allow dns resolution
 | 
			
		||||
    - ports:
 | 
			
		||||
        - port: 53
 | 
			
		||||
          protocol: UDP
 | 
			
		||||
        - port: 53
 | 
			
		||||
          protocol: TCP
 | 
			
		||||
    # Allow connection to other cluster pods
 | 
			
		||||
    - ports:
 | 
			
		||||
        - port: {{ .Values.containerPorts.mongodb }}
 | 
			
		||||
      to:
 | 
			
		||||
        - podSelector:
 | 
			
		||||
            matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 14 }}
 | 
			
		||||
    {{- if (and .Values.externalAccess.enabled .Values.externalAccess.autoDiscovery.enabled) }}
 | 
			
		||||
    {{- $kubernetesEndpoints := lookup "v1" "Endpoints" (include "common.names.namespace" .) "kubernetes" }}
 | 
			
		||||
    {{- range $kubernetesEndpoints.subsets }}
 | 
			
		||||
    # Allow connection to API server, required by auto-discovery containers
 | 
			
		||||
    - ports:
 | 
			
		||||
      {{- range .ports }}
 | 
			
		||||
        - port: {{ .port }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      to:
 | 
			
		||||
        {{- range .addresses }}
 | 
			
		||||
        - ipBlock:
 | 
			
		||||
            cidr: {{ printf "%s/32" .ip }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- if .Values.networkPolicy.extraEgress }}
 | 
			
		||||
    {{- include "common.tplvalues.render" ( dict "value" .Values.rts.networkPolicy.extraEgress "context" $ ) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  ingress:
 | 
			
		||||
    - ports:
 | 
			
		||||
        - port: {{ .Values.containerPorts.mongodb }}
 | 
			
		||||
      {{- if .Values.metrics.enabled }}
 | 
			
		||||
        - port: {{ .Values.metrics.containerPort }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if not .Values.networkPolicy.allowExternal }}
 | 
			
		||||
      from:
 | 
			
		||||
        - podSelector:
 | 
			
		||||
            matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 14 }}
 | 
			
		||||
              app.kubernetes.io/component: mongodb
 | 
			
		||||
        {{- if .Values.networkPolicy.addExternalClientAccess }}
 | 
			
		||||
        - podSelector:
 | 
			
		||||
            matchLabels: 
 | 
			
		||||
              {{ template "common.names.fullname" . }}-client: "true"
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.networkPolicy.ingressPodMatchLabels }}
 | 
			
		||||
        - podSelector:
 | 
			
		||||
            matchLabels: {{- include "common.tplvalues.render" (dict "value" .Values.networkPolicy.ingressPodMatchLabels "context" $ ) | nindent 14 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- $ingressNSMatchLabels := coalesce .Values.networkPolicy.ingressNSMatchLabels .Values.networkPolicy.namespaceSelector }}
 | 
			
		||||
        {{- if $ingressNSMatchLabels }}
 | 
			
		||||
        - namespaceSelector:
 | 
			
		||||
            matchLabels: {{- include "common.tplvalues.render" (dict "value" $ingressNSMatchLabels "context" $ ) | nindent 14 }}
 | 
			
		||||
          {{- $ingressNSPodMatchLabels := coalesce .Values.networkPolicy.ingressNSPodMatchLabels .Values.networkPolicy.podSelector }}
 | 
			
		||||
          {{- if $ingressNSPodMatchLabels }}
 | 
			
		||||
          podSelector:
 | 
			
		||||
            matchLabels: {{- include "common.tplvalues.render" (dict "value" $ingressNSPodMatchLabels "context" $ ) | nindent 14 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
    {{- $extraIngress := coalesce .Values.networkPolicy.extraIngress .Values.networkPolicy.customRules }}
 | 
			
		||||
    {{- if $extraIngress }}
 | 
			
		||||
    {{- include "common.tplvalues.render" ( dict "value" $extraIngress "context" $ ) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										23
									
								
								opencloud/charts/mongodb/templates/prometheusrule.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								opencloud/charts/mongodb/templates/prometheusrule.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and .Values.metrics.enabled .Values.metrics.prometheusRule.enabled }}
 | 
			
		||||
apiVersion: monitoring.coreos.com/v1
 | 
			
		||||
kind: PrometheusRule
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.prometheusRule.namespace" . }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    {{- if .Values.metrics.prometheusRule.additionalLabels }}
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" .Values.metrics.prometheusRule.additionalLabels "context" $) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  groups:
 | 
			
		||||
    - name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
      rules: {{- include "common.tplvalues.render" ( dict "value" .Values.metrics.prometheusRule.rules "context" $ ) | nindent 8 }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										51
									
								
								opencloud/charts/mongodb/templates/psp.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								opencloud/charts/mongodb/templates/psp.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and (include "common.capabilities.psp.supported" .) .Values.podSecurityPolicy.create }}
 | 
			
		||||
apiVersion: policy/v1beta1
 | 
			
		||||
kind: PodSecurityPolicy
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
{{- if .Values.podSecurityPolicy.spec }}
 | 
			
		||||
{{ include "common.tplvalues.render" ( dict "value" .Values.podSecurityPolicy.spec "context" $ ) | nindent 2 }}
 | 
			
		||||
{{- else }}
 | 
			
		||||
  allowPrivilegeEscalation: {{ .Values.podSecurityPolicy.allowPrivilegeEscalation }}
 | 
			
		||||
  fsGroup:
 | 
			
		||||
    rule: 'MustRunAs'
 | 
			
		||||
    ranges:
 | 
			
		||||
      - min: {{ .Values.podSecurityContext.fsGroup }}
 | 
			
		||||
        max: {{ .Values.podSecurityContext.fsGroup }}
 | 
			
		||||
  hostIPC: false
 | 
			
		||||
  hostNetwork: false
 | 
			
		||||
  hostPID: false
 | 
			
		||||
  privileged: {{ .Values.podSecurityPolicy.privileged }}
 | 
			
		||||
  readOnlyRootFilesystem: false
 | 
			
		||||
  requiredDropCapabilities:
 | 
			
		||||
    - ALL
 | 
			
		||||
  runAsUser:
 | 
			
		||||
    rule: 'MustRunAs'
 | 
			
		||||
    ranges:
 | 
			
		||||
      - min: {{ .Values.containerSecurityContext.runAsUser }}
 | 
			
		||||
        max: {{ .Values.containerSecurityContext.runAsUser }}
 | 
			
		||||
  seLinux:
 | 
			
		||||
    rule: 'RunAsAny'
 | 
			
		||||
  supplementalGroups:
 | 
			
		||||
    rule: 'MustRunAs'
 | 
			
		||||
    ranges:
 | 
			
		||||
      - min: {{ .Values.containerSecurityContext.runAsUser }}
 | 
			
		||||
        max: {{ .Values.containerSecurityContext.runAsUser }}
 | 
			
		||||
  volumes:
 | 
			
		||||
    - 'configMap'
 | 
			
		||||
    - 'secret'
 | 
			
		||||
    - 'emptyDir'
 | 
			
		||||
    - 'persistentVolumeClaim'
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
@@ -0,0 +1,73 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and (eq .Values.architecture "replicaset") .Values.externalAccess.enabled (not (eq .Values.externalAccess.service.type "ClusterIP")) }}
 | 
			
		||||
{{- $fullName := include "mongodb.fullname" . }}
 | 
			
		||||
{{- $replicaCount := .Values.replicaCount | int }}
 | 
			
		||||
{{- $root := . }}
 | 
			
		||||
 | 
			
		||||
{{- range $i, $e := until $replicaCount }}
 | 
			
		||||
{{- $targetPod := printf "%s-%d" (printf "%s" $fullName) $i }}
 | 
			
		||||
{{- $_ := set $ "targetPod" $targetPod }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-%d-external" $fullName $i }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" $ }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" $root.Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
    pod: {{ $targetPod }}
 | 
			
		||||
  {{- if or $root.Values.externalAccess.service.annotations $root.Values.commonAnnotations $root.Values.externalAccess.service.annotationsList }}
 | 
			
		||||
  {{- $exclusiveAnnotations := dict }}
 | 
			
		||||
  {{- if gt (len $root.Values.externalAccess.service.annotationsList) $i }}
 | 
			
		||||
  {{- $exclusiveAnnotations = index $root.Values.externalAccess.service.annotationsList $i }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list $root.Values.externalAccess.service.annotations $root.Values.commonAnnotations $exclusiveAnnotations ) "context" $ ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  type: {{ $root.Values.externalAccess.service.type }}
 | 
			
		||||
  {{- if eq $root.Values.externalAccess.service.type "LoadBalancer" }}
 | 
			
		||||
  {{- if not (empty $root.Values.externalAccess.service.loadBalancerIPs) }}
 | 
			
		||||
  loadBalancerIP: {{ index $root.Values.externalAccess.service.loadBalancerIPs $i }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if and (eq $root.Values.externalAccess.service.type "LoadBalancer") $root.Values.externalAccess.service.loadBalancerClass }}
 | 
			
		||||
  loadBalancerClass: {{ $root.Values.externalAccess.service.loadBalancerClass }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if $root.Values.externalAccess.service.loadBalancerSourceRanges }}
 | 
			
		||||
  loadBalancerSourceRanges: {{- toYaml $root.Values.externalAccess.service.loadBalancerSourceRanges | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  allocateLoadBalancerNodePorts: {{ $root.Values.externalAccess.service.allocateLoadBalancerNodePorts }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if (or (eq $root.Values.externalAccess.service.type "LoadBalancer") (eq $root.Values.externalAccess.service.type "NodePort")) }}
 | 
			
		||||
  externalTrafficPolicy: {{ $root.Values.externalAccess.service.externalTrafficPolicy | quote }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if $root.Values.externalAccess.service.sessionAffinity }}
 | 
			
		||||
  sessionAffinity: {{ $root.Values.externalAccess.service.sessionAffinity }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if $root.Values.externalAccess.service.sessionAffinityConfig }}
 | 
			
		||||
  sessionAffinityConfig: {{- include "common.tplvalues.render" (dict "value" $root.Values.externalAccess.service.sessionAffinityConfig "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  publishNotReadyAddresses: true
 | 
			
		||||
  ports:
 | 
			
		||||
    - name: {{ $root.Values.externalAccess.service.portName | quote }}
 | 
			
		||||
      port: {{ $root.Values.externalAccess.service.ports.mongodb }}
 | 
			
		||||
      {{- if not (empty $root.Values.externalAccess.service.nodePorts) }}
 | 
			
		||||
      {{- $nodePort := index $root.Values.externalAccess.service.nodePorts $i }}
 | 
			
		||||
      nodePort: {{ $nodePort }}
 | 
			
		||||
      {{- else }}
 | 
			
		||||
      nodePort: null
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      targetPort: mongodb
 | 
			
		||||
    {{- if $root.Values.externalAccess.service.extraPorts }}
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" $root.Values.externalAccess.service.extraPorts "context" $) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list $root.Values.podLabels $root.Values.commonLabels ) "context" $ ) }}
 | 
			
		||||
  selector: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
    statefulset.kubernetes.io/pod-name: {{ $targetPod }}
 | 
			
		||||
---
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
@@ -0,0 +1,32 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if eq .Values.architecture "replicaset" }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.service.nameOverride" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if or .Values.commonAnnotations .Values.service.headless.annotations }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.service.headless.annotations .Values.commonAnnotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  type: ClusterIP
 | 
			
		||||
  clusterIP: None
 | 
			
		||||
  publishNotReadyAddresses: true
 | 
			
		||||
  ports:
 | 
			
		||||
    - name: {{ .Values.service.portName | quote }}
 | 
			
		||||
      port: {{ .Values.service.ports.mongodb }}
 | 
			
		||||
      targetPort: mongodb
 | 
			
		||||
    {{- if .Values.service.extraPorts }}
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" .Values.service.extraPorts "context" $) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  selector: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										28
									
								
								opencloud/charts/mongodb/templates/replicaset/pdb.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								opencloud/charts/mongodb/templates/replicaset/pdb.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and (eq .Values.architecture "replicaset") .Values.pdb.create }}
 | 
			
		||||
apiVersion: {{ include "common.capabilities.policy.apiVersion" . }}
 | 
			
		||||
kind: PodDisruptionBudget
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  {{- if .Values.pdb.minAvailable }}
 | 
			
		||||
  minAvailable: {{ .Values.pdb.minAvailable }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if or .Values.pdb.maxUnavailable (not .Values.pdb.minAvailable) }}
 | 
			
		||||
  maxUnavailable: {{ .Values.pdb.maxUnavailable | default 1 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
 | 
			
		||||
      app.kubernetes.io/component: mongodb
 | 
			
		||||
{{- end }}
 | 
			
		||||
@@ -0,0 +1,316 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if eq .Values.architecture "replicaset" }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: ConfigMap
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-scripts" (include "mongodb.fullname" .) }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
data:
 | 
			
		||||
  {{- $fullname := include "mongodb.fullname" . }}
 | 
			
		||||
  {{- $releaseNamespace := include "mongodb.namespace" . }}
 | 
			
		||||
  {{- if and .Values.externalAccess.autoDiscovery.enabled (eq .Values.externalAccess.service.type "LoadBalancer") }}
 | 
			
		||||
  auto-discovery.sh: |-
 | 
			
		||||
    #!/bin/bash
 | 
			
		||||
 | 
			
		||||
    SVC_NAME="${MY_POD_NAME}-external"
 | 
			
		||||
 | 
			
		||||
    # Auxiliary functions
 | 
			
		||||
    retry_while() {
 | 
			
		||||
        local -r cmd="${1:?cmd is missing}"
 | 
			
		||||
        local -r retries="${2:-12}"
 | 
			
		||||
        local -r sleep_time="${3:-5}"
 | 
			
		||||
        local return_value=1
 | 
			
		||||
 | 
			
		||||
        read -r -a command <<< "$cmd"
 | 
			
		||||
        for ((i = 1 ; i <= retries ; i+=1 )); do
 | 
			
		||||
            "${command[@]}" && return_value=0 && break
 | 
			
		||||
            sleep "$sleep_time"
 | 
			
		||||
        done
 | 
			
		||||
        return $return_value
 | 
			
		||||
    }
 | 
			
		||||
    k8s_svc_lb_ip() {
 | 
			
		||||
        local namespace=${1:?namespace is missing}
 | 
			
		||||
        local service=${2:?service is missing}
 | 
			
		||||
        local service_ip=$(kubectl get svc "$service" -n "$namespace" -o jsonpath="{.status.loadBalancer.ingress[0].ip}")
 | 
			
		||||
        local service_hostname=$(kubectl get svc "$service" -n "$namespace" -o jsonpath="{.status.loadBalancer.ingress[0].hostname}")
 | 
			
		||||
 | 
			
		||||
        if [[ -n ${service_ip} ]]; then
 | 
			
		||||
            echo "${service_ip}"
 | 
			
		||||
        else
 | 
			
		||||
            echo "${service_hostname}"
 | 
			
		||||
        fi
 | 
			
		||||
    }
 | 
			
		||||
    k8s_svc_lb_ip_ready() {
 | 
			
		||||
        local namespace=${1:?namespace is missing}
 | 
			
		||||
        local service=${2:?service is missing}
 | 
			
		||||
        [[ -n "$(k8s_svc_lb_ip "$namespace" "$service")" ]]
 | 
			
		||||
    }
 | 
			
		||||
    # Wait until LoadBalancer IP is ready
 | 
			
		||||
    retry_while "k8s_svc_lb_ip_ready {{ $releaseNamespace }} $SVC_NAME" || exit 1
 | 
			
		||||
    # Obtain LoadBalancer external IP
 | 
			
		||||
    k8s_svc_lb_ip "{{ $releaseNamespace }}" "$SVC_NAME" | tee "$SHARED_FILE"
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  setup.sh: |-
 | 
			
		||||
    #!/bin/bash
 | 
			
		||||
 | 
			
		||||
    . /opt/bitnami/scripts/mongodb-env.sh
 | 
			
		||||
    . /opt/bitnami/scripts/libfs.sh
 | 
			
		||||
    . /opt/bitnami/scripts/liblog.sh
 | 
			
		||||
    . /opt/bitnami/scripts/libvalidations.sh
 | 
			
		||||
 | 
			
		||||
    {{- if .Values.externalAccess.enabled }}
 | 
			
		||||
    {{- if eq .Values.externalAccess.service.type "LoadBalancer" }}
 | 
			
		||||
    {{- if .Values.externalAccess.autoDiscovery.enabled }}
 | 
			
		||||
    export MONGODB_ADVERTISED_HOSTNAME="$(<${SHARED_FILE})"
 | 
			
		||||
    {{- else }}
 | 
			
		||||
    ID="${MY_POD_NAME#"{{ $fullname }}-"}"
 | 
			
		||||
    export MONGODB_ADVERTISED_HOSTNAME=$(echo '{{ coalesce .Values.externalAccess.service.publicNames .Values.externalAccess.service.loadBalancerIPs }}' | tr -d '[]' | cut -d ' ' -f "$(($ID + 1))")
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- else if eq .Values.externalAccess.service.type "NodePort" }}
 | 
			
		||||
    ID="${MY_POD_NAME#"{{ $fullname }}-"}"
 | 
			
		||||
    if is_empty_value "$MONGODB_ADVERTISED_PORT_NUMBER"; then
 | 
			
		||||
      export MONGODB_ADVERTISED_PORT_NUMBER=$(echo '{{ .Values.externalAccess.service.nodePorts }}' | tr -d '[]' | cut -d ' ' -f "$(($ID + 1))")
 | 
			
		||||
    fi
 | 
			
		||||
    {{- if .Values.externalAccess.service.domain }}
 | 
			
		||||
    export MONGODB_ADVERTISED_HOSTNAME={{ .Values.externalAccess.service.domain }}
 | 
			
		||||
    {{- else }}
 | 
			
		||||
    export MONGODB_ADVERTISED_HOSTNAME=$MY_POD_HOST_IP
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
 | 
			
		||||
    {{- if .Values.replicaSetConfigurationSettings.enabled }}
 | 
			
		||||
    # placed here before root password env is overwritten
 | 
			
		||||
    # makes no assumption about starting state
 | 
			
		||||
    # ensures that any stepDown or non-default starting state is handled
 | 
			
		||||
    /scripts/replicaSetConfigurationSettings.sh &
 | 
			
		||||
    {{- end }}
 | 
			
		||||
 | 
			
		||||
    if is_empty_value "$MONGODB_ADVERTISED_PORT_NUMBER"; then
 | 
			
		||||
      export MONGODB_ADVERTISED_PORT_NUMBER="$MONGODB_PORT_NUMBER"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    info "Advertised Hostname: $MONGODB_ADVERTISED_HOSTNAME"
 | 
			
		||||
    info "Advertised Port: $MONGODB_ADVERTISED_PORT_NUMBER"
 | 
			
		||||
 | 
			
		||||
    # Check for existing replica set in case there is no data in the PVC
 | 
			
		||||
    # This is for cases where the PVC is lost or for MongoDB caches without
 | 
			
		||||
    # persistence
 | 
			
		||||
    current_primary=""
 | 
			
		||||
    if is_dir_empty "${MONGODB_DATA_DIR}/db"; then
 | 
			
		||||
      info "Data dir empty, checking if the replica set already exists"
 | 
			
		||||
      {{- $replicaCount := int .Values.replicaCount }}
 | 
			
		||||
      {{- $portNumber := int .Values.service.ports.mongodb }}
 | 
			
		||||
      {{- $fullname := include "mongodb.fullname" . }}
 | 
			
		||||
      {{- $releaseNamespace := include "mongodb.namespace" . }}
 | 
			
		||||
      {{- $clusterDomain := .Values.clusterDomain }}
 | 
			
		||||
      {{- $mongoList := list }}
 | 
			
		||||
      {{- range $e, $i := until $replicaCount }}
 | 
			
		||||
      {{- $mongoList = append $mongoList (printf "%s-%d.%s-headless.%s.svc.%s:%d" $fullname $i $fullname $releaseNamespace $clusterDomain $portNumber) }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
 | 
			
		||||
      {{- if .Values.externalAccess.externalMaster.enabled }}
 | 
			
		||||
        current_primary={{ printf "%s:%d" (.Values.externalAccess.externalMaster.host) ( int .Values.externalAccess.externalMaster.port) }}
 | 
			
		||||
      {{- else }}
 | 
			
		||||
        current_primary=$(mongosh admin --host "{{ join "," $mongoList }}" {{- if .Values.auth.enabled }} --authenticationDatabase admin -u $MONGODB_ROOT_USER -p $MONGODB_ROOT_PASSWORD{{- end }}{{- if .Values.tls.enabled}} --tls {{ if .Values.tls.mTLS.enabled }}--tlsCertificateKeyFile=/certs/mongodb.pem {{ end }}--tlsCAFile=/certs/mongodb-ca-cert{{- end }} --eval 'db.runCommand("ismaster")' | awk -F\' '/primary:/ {print $2}')
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      if ! is_empty_value "$current_primary"; then
 | 
			
		||||
        info "Detected existing primary: ${current_primary}"
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if ! is_empty_value "$current_primary" && [[ "$MONGODB_ADVERTISED_HOSTNAME:$MONGODB_ADVERTISED_PORT_NUMBER" == "$current_primary" ]]; then
 | 
			
		||||
        info "Advertised name matches current primary, configuring node as a primary"
 | 
			
		||||
        export MONGODB_REPLICA_SET_MODE="primary"
 | 
			
		||||
    elif ! is_empty_value "$current_primary" && [[ "$MONGODB_ADVERTISED_HOSTNAME:$MONGODB_ADVERTISED_PORT_NUMBER" != "$current_primary" ]]; then
 | 
			
		||||
        info "Current primary is different from this node. Configuring the node as replica of ${current_primary}"
 | 
			
		||||
        export MONGODB_REPLICA_SET_MODE="secondary"
 | 
			
		||||
        export MONGODB_INITIAL_PRIMARY_HOST="${current_primary%:*}"
 | 
			
		||||
        export MONGODB_INITIAL_PRIMARY_PORT_NUMBER="${current_primary#*:}"
 | 
			
		||||
        export MONGODB_SET_SECONDARY_OK="yes"
 | 
			
		||||
    elif [[ "$MY_POD_NAME" = "{{ $fullname }}-0" ]]; then
 | 
			
		||||
        info "Pod name matches initial primary pod name, configuring node as a primary"
 | 
			
		||||
        export MONGODB_REPLICA_SET_MODE="primary"
 | 
			
		||||
    else
 | 
			
		||||
        info "Pod name doesn't match initial primary pod name, configuring node as a secondary"
 | 
			
		||||
        export MONGODB_REPLICA_SET_MODE="secondary"
 | 
			
		||||
        export MONGODB_INITIAL_PRIMARY_PORT_NUMBER="$MONGODB_PORT_NUMBER"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ "$MONGODB_REPLICA_SET_MODE" == "secondary" ]]; then
 | 
			
		||||
        export MONGODB_INITIAL_PRIMARY_ROOT_USER="$MONGODB_ROOT_USER"
 | 
			
		||||
        export MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD="$MONGODB_ROOT_PASSWORD"
 | 
			
		||||
        export MONGODB_ROOT_PASSWORD=""
 | 
			
		||||
        export MONGODB_EXTRA_USERNAMES=""
 | 
			
		||||
        export MONGODB_EXTRA_DATABASES=""
 | 
			
		||||
        export MONGODB_EXTRA_PASSWORDS=""
 | 
			
		||||
        export MONGODB_ROOT_PASSWORD_FILE=""
 | 
			
		||||
        export MONGODB_EXTRA_USERNAMES_FILE=""
 | 
			
		||||
        export MONGODB_EXTRA_DATABASES_FILE=""
 | 
			
		||||
        export MONGODB_EXTRA_PASSWORDS_FILE=""
 | 
			
		||||
    fi
 | 
			
		||||
    exec /opt/bitnami/scripts/mongodb/entrypoint.sh /opt/bitnami/scripts/mongodb/run.sh
 | 
			
		||||
  setup-hidden.sh: |-
 | 
			
		||||
    #!/bin/bash
 | 
			
		||||
 | 
			
		||||
    . /opt/bitnami/scripts/mongodb-env.sh
 | 
			
		||||
 | 
			
		||||
    {{- if .Values.externalAccess.hidden.enabled }}
 | 
			
		||||
    {{- if eq .Values.externalAccess.hidden.service.type "LoadBalancer" }}
 | 
			
		||||
    {{- if .Values.externalAccess.autoDiscovery.enabled }}
 | 
			
		||||
    export MONGODB_ADVERTISED_HOSTNAME="$(<${SHARED_FILE})"
 | 
			
		||||
    {{- else }}
 | 
			
		||||
    ID="${MY_POD_NAME#"{{ $fullname }}-hidden-"}"
 | 
			
		||||
    export MONGODB_ADVERTISED_HOSTNAME=$(echo '{{ .Values.externalAccess.hidden.service.loadBalancerIPs }}' | tr -d '[]' | cut -d ' ' -f "$(($ID + 1))")
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- else if eq .Values.externalAccess.hidden.service.type "NodePort" }}
 | 
			
		||||
    ID="${MY_POD_NAME#"{{ $fullname }}-hidden-"}"
 | 
			
		||||
    if is_empty_value "$MONGODB_ADVERTISED_PORT_NUMBER"; then
 | 
			
		||||
      export MONGODB_ADVERTISED_PORT_NUMBER=$(echo '{{ .Values.externalAccess.service.nodePorts }}' | tr -d '[]' | cut -d ' ' -f "$(($ID + 1))")
 | 
			
		||||
    fi
 | 
			
		||||
    {{- if .Values.externalAccess.hidden.service.domain }}
 | 
			
		||||
    export MONGODB_ADVERTISED_HOSTNAME={{ .Values.externalAccess.hidden.service.domain }}
 | 
			
		||||
    {{- else }}
 | 
			
		||||
    export MONGODB_ADVERTISED_HOSTNAME=$MY_POD_HOST_IP
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
 | 
			
		||||
    {{- if .Values.replicaSetConfigurationSettings.enabled }}
 | 
			
		||||
    # placed here before root password env is overwritten
 | 
			
		||||
    # makes no assumption about starting state
 | 
			
		||||
    # ensures that any stepDown or non-default starting state is handled
 | 
			
		||||
    /scripts/replicaSetConfigurationSettings.sh &
 | 
			
		||||
    {{- end }}
 | 
			
		||||
 | 
			
		||||
    echo "Advertised Hostname: $MONGODB_ADVERTISED_HOSTNAME"
 | 
			
		||||
    echo "Advertised Port: $MONGODB_ADVERTISED_PORT_NUMBER"
 | 
			
		||||
    echo "Configuring node as a hidden node"
 | 
			
		||||
    export MONGODB_REPLICA_SET_MODE="hidden"
 | 
			
		||||
    export MONGODB_INITIAL_PRIMARY_ROOT_USER="$MONGODB_ROOT_USER"
 | 
			
		||||
    export MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD="$MONGODB_ROOT_PASSWORD"
 | 
			
		||||
    export MONGODB_INITIAL_PRIMARY_PORT_NUMBER="$MONGODB_PORT_NUMBER"
 | 
			
		||||
    export MONGODB_ROOT_PASSWORD=""
 | 
			
		||||
    export MONGODB_EXTRA_USERNAMES=""
 | 
			
		||||
    export MONGODB_EXTRA_DATABASES=""
 | 
			
		||||
    export MONGODB_EXTRA_PASSWORDS=""
 | 
			
		||||
    export MONGODB_ROOT_PASSWORD_FILE=""
 | 
			
		||||
    export MONGODB_EXTRA_USERNAMES_FILE=""
 | 
			
		||||
    export MONGODB_EXTRA_DATABASES_FILE=""
 | 
			
		||||
    export MONGODB_EXTRA_PASSWORDS_FILE=""
 | 
			
		||||
    exec /opt/bitnami/scripts/mongodb/entrypoint.sh /opt/bitnami/scripts/mongodb/run.sh
 | 
			
		||||
  {{- if .Values.replicaSetConfigurationSettings.enabled }}
 | 
			
		||||
  replicaSetConfigurationSettings.sh: |-
 | 
			
		||||
    #!/bin/bash
 | 
			
		||||
    # This script to be called when pod starts.
 | 
			
		||||
    # This script sets rs settings which can not be applied via conf file
 | 
			
		||||
 | 
			
		||||
    function logger ()
 | 
			
		||||
    #$1 is the line to be logged
 | 
			
		||||
    {
 | 
			
		||||
      echo "replicaSetConfigurationSettings.sh -- ${1}" >&1
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    SLEEP_PERIOD=10
 | 
			
		||||
 | 
			
		||||
    {{- if and .Values.auth.enabled (or .Values.auth.rootPassword .Values.auth.existingSecret)}}
 | 
			
		||||
    usernameAndPassword="{{- if .Values.tls.enabled}} --tls {{ if .Values.tls.mTLS.enabled }}--tlsCertificateKeyFile=/certs/mongodb.pem {{ end }}--tlsCAFile=/certs/mongodb-ca-cert{{- end }} -u ${MONGODB_ROOT_USER} -p ${MONGODB_ROOT_PASSWORD}"
 | 
			
		||||
    {{- else }}
 | 
			
		||||
    usernameAndPassword=""
 | 
			
		||||
    {{- end }}
 | 
			
		||||
 | 
			
		||||
    # load Values.replicaSetConfigurationSettings.configuration into associtive array which makes iterating and string manipulation easy
 | 
			
		||||
    declare -A desiredRsConf
 | 
			
		||||
    {{ range $setting, $value := .Values.replicaSetConfigurationSettings.configuration -}}
 | 
			
		||||
    {{ printf "desiredRsConf[%s]='%v'" $setting $value }}
 | 
			
		||||
    {{ end }}
 | 
			
		||||
 | 
			
		||||
    rsConfWriteAttempts=0
 | 
			
		||||
    rs_conf_configured_ok=unknown
 | 
			
		||||
 | 
			
		||||
    while [[ "${rs_conf_configured_ok}" != "true" ]]; do
 | 
			
		||||
 | 
			
		||||
      # give the rs setup a chance to succeed before attempting to read or configure
 | 
			
		||||
      sleep ${SLEEP_PERIOD}
 | 
			
		||||
 | 
			
		||||
      counter=0
 | 
			
		||||
      while ! mongosh ${usernameAndPassword} --eval 'rs.conf()'; do
 | 
			
		||||
        counter=$((${counter} +1))
 | 
			
		||||
        logger "not yet able to read rs.conf settings from the currently running rs (after ${counter} attempts)"
 | 
			
		||||
        sleep ${SLEEP_PERIOD}
 | 
			
		||||
      done
 | 
			
		||||
      counter=$((${counter} +1))
 | 
			
		||||
      logger "rs.conf settings have been read from the currently running rs (after ${counter} attempts)"
 | 
			
		||||
 | 
			
		||||
      # read rs.conf again and store it. settings format is '"<key>" : <value>,'
 | 
			
		||||
      currentRsConf=$(mongosh ${usernameAndPassword} --eval 'rs.conf()')
 | 
			
		||||
 | 
			
		||||
      desiredEqualsactual=unknown
 | 
			
		||||
      settingsToConfigure=""
 | 
			
		||||
      for key in ${!desiredRsConf[@]}; do
 | 
			
		||||
        value=${desiredRsConf[$key]}
 | 
			
		||||
        if ! $(echo "\"${currentRsConf}"\" | grep -q -e "${key}: ${value},"); then
 | 
			
		||||
           if [[ $key =~ ^members\[[0-9]+\]\..+ ]]; then
 | 
			
		||||
            memberIndex=$(echo $key | grep -o -E '[0-9]+')
 | 
			
		||||
            nodeConfigKey=${key#*.}
 | 
			
		||||
            settingsToConfigure="${settingsToConfigure}cfg.members[${memberIndex}].${nodeConfigKey} = ${value}; "
 | 
			
		||||
          else
 | 
			
		||||
            # General rs settings
 | 
			
		||||
            settingsToConfigure="${settingsToConfigure}cfg.settings.${key} = ${value}; "
 | 
			
		||||
          fi
 | 
			
		||||
           desiredEqualsactual=false
 | 
			
		||||
        else
 | 
			
		||||
          logger "rs conf: ${key} is already at desired value: ${value}"
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
 | 
			
		||||
      if [[ "${desiredEqualsactual}" != "false" ]]; then
 | 
			
		||||
        logger "replicaSetConfigurationSettings match the settings of the currently running rs"
 | 
			
		||||
        desiredEqualsactual=true
 | 
			
		||||
        rs_conf_configured_ok=true
 | 
			
		||||
        logger "Current settings match desired settings (There have been ${rsConfWriteAttempts} attempts to write to mongoDB rs configuration)"
 | 
			
		||||
        exit
 | 
			
		||||
      fi
 | 
			
		||||
 | 
			
		||||
      # apply the settings only if this member is currently the mongo replicaset PRIMARY
 | 
			
		||||
      # it might take a little time before any pod is PRIMARY
 | 
			
		||||
      isMaster=unknown
 | 
			
		||||
      if ! mongosh ${usernameAndPassword} --eval 'rs.isMaster()' | grep -q "ismaster: true"; then
 | 
			
		||||
        isMaster=false
 | 
			
		||||
        logger "This node is not yet PRIMARY - replicaSetConfigurationSettings will only be set on the member that is currently PRIMARY"
 | 
			
		||||
      else
 | 
			
		||||
        isMaster=true
 | 
			
		||||
        logger "This node is PRIMARY"
 | 
			
		||||
      fi
 | 
			
		||||
 | 
			
		||||
      if [[ "${isMaster}" == "true" ]]; then
 | 
			
		||||
        logger "This node is currently PRIMARY - will apply rs.conf settings"
 | 
			
		||||
 | 
			
		||||
        # avoiding tricky string substitution with single quotes by making the eval string a set of vars
 | 
			
		||||
        rsconf="cfg = rs.conf();"
 | 
			
		||||
        rsreconf="rs.reconfig(cfg);"
 | 
			
		||||
        rsCommand="${rsconf} ${settingsToConfigure} ${rsreconf}"
 | 
			
		||||
 | 
			
		||||
        mongosh ${usernameAndPassword} --eval "${rsCommand}"
 | 
			
		||||
        if [ $? -ne 0 ]; then
 | 
			
		||||
          logger "Failed to apply mongodb cfg.settings configuration"
 | 
			
		||||
        else
 | 
			
		||||
          logger "mongodb replicaset cfg.settings configuration applied"
 | 
			
		||||
          logger "Will check rs conf"
 | 
			
		||||
          # don't exit just yet - the settings will be checked in the next loop
 | 
			
		||||
        fi
 | 
			
		||||
        rsConfWriteAttempts=$((${rsConfWriteAttempts} + 1 ))
 | 
			
		||||
      fi
 | 
			
		||||
    done
 | 
			
		||||
  {{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
  
 | 
			
		||||
							
								
								
									
										565
									
								
								opencloud/charts/mongodb/templates/replicaset/statefulset.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										565
									
								
								opencloud/charts/mongodb/templates/replicaset/statefulset.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,565 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if eq .Values.architecture "replicaset" }}
 | 
			
		||||
{{- $replicaCount := int .Values.replicaCount }}
 | 
			
		||||
{{- $loadBalancerIPListLength := len .Values.externalAccess.service.loadBalancerIPs }}
 | 
			
		||||
{{- $publicNamesLength := len .Values.externalAccess.service.publicNames }}
 | 
			
		||||
{{- if not (and .Values.externalAccess.enabled (not .Values.externalAccess.autoDiscovery.enabled) (eq .Values.externalAccess.service.type "LoadBalancer") (not (eq $replicaCount $loadBalancerIPListLength)) (not (eq $replicaCount $publicNamesLength))) }}
 | 
			
		||||
apiVersion: {{ include "common.capabilities.statefulset.apiVersion" . }}
 | 
			
		||||
kind: StatefulSet
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  {{- $labels := include "common.tplvalues.merge" ( dict "values" ( list .Values.labels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" $labels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if or .Values.annotations .Values.commonAnnotations }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.annotations .Values.commonAnnotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  serviceName: {{ include "mongodb.service.nameOverride" . }}
 | 
			
		||||
  podManagementPolicy: {{ .Values.podManagementPolicy }}
 | 
			
		||||
  replicas: {{ .Values.replicaCount }}
 | 
			
		||||
  {{- if .Values.updateStrategy }}
 | 
			
		||||
  updateStrategy: {{- toYaml .Values.updateStrategy | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
 | 
			
		||||
      app.kubernetes.io/component: mongodb
 | 
			
		||||
  template:
 | 
			
		||||
    metadata:
 | 
			
		||||
      labels: {{- include "common.labels.standard" ( dict "customLabels" $podLabels "context" $ ) | nindent 8 }}
 | 
			
		||||
        app.kubernetes.io/component: mongodb
 | 
			
		||||
      {{- if or (include "mongodb.createConfigmap" .) .Values.podAnnotations .Values.passwordUpdateJob.enabled }}
 | 
			
		||||
      annotations:
 | 
			
		||||
        {{- if (include "mongodb.createConfigmap" .) }}
 | 
			
		||||
        checksum/configuration: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.passwordUpdateJob.enabled }}
 | 
			
		||||
        charts.bitnami.com/password-last-update: {{ now | date "20060102150405" | quote }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.podAnnotations }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.podAnnotations "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
    spec:
 | 
			
		||||
      {{- include "mongodb.imagePullSecrets" . | nindent 6 }}
 | 
			
		||||
      {{- if .Values.schedulerName }}
 | 
			
		||||
      schedulerName: {{ .Values.schedulerName | quote }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      serviceAccountName: {{ template "mongodb.serviceAccountName" . }}
 | 
			
		||||
      automountServiceAccountToken: {{ .Values.automountServiceAccountToken }}
 | 
			
		||||
      {{- if .Values.hostAliases }}
 | 
			
		||||
      hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.hostAliases "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.affinity }}
 | 
			
		||||
      affinity: {{- include "common.tplvalues.render" (dict "value" .Values.affinity "context" $) | nindent 8 }}
 | 
			
		||||
      {{- else }}
 | 
			
		||||
      affinity:
 | 
			
		||||
        podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAffinityPreset "component" "mongodb" "customLabels" $podLabels "topologyKey" .Values.topologyKey "context" $) | nindent 10 }}
 | 
			
		||||
        podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAntiAffinityPreset "component" "mongodb" "customLabels" $podLabels "topologyKey" .Values.topologyKey "context" $) | nindent 10 }}
 | 
			
		||||
        nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.nodeAffinityPreset.type "key" .Values.nodeAffinityPreset.key "values" .Values.nodeAffinityPreset.values) | nindent 10 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.nodeSelector }}
 | 
			
		||||
      nodeSelector: {{- include "common.tplvalues.render" (dict "value" .Values.nodeSelector "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.tolerations }}
 | 
			
		||||
      tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.tolerations "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.topologySpreadConstraints }}
 | 
			
		||||
      topologySpreadConstraints: {{- include "common.tplvalues.render" (dict "value" .Values.topologySpreadConstraints "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.priorityClassName }}
 | 
			
		||||
      priorityClassName: {{ .Values.priorityClassName }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.runtimeClassName }}
 | 
			
		||||
      runtimeClassName: {{ .Values.runtimeClassName }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.podSecurityContext.enabled }}
 | 
			
		||||
      securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.podSecurityContext "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{ if .Values.terminationGracePeriodSeconds }}
 | 
			
		||||
      terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      enableServiceLinks: {{ .Values.enableServiceLinks }}
 | 
			
		||||
      initContainers:
 | 
			
		||||
        {{- if .Values.initContainers }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if and .Values.volumePermissions.enabled .Values.persistence.enabled }}
 | 
			
		||||
        {{- include "mongodb.initContainer.volumePermissions" . | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if and .Values.externalAccess.enabled .Values.externalAccess.autoDiscovery.enabled (eq .Values.externalAccess.service.type "LoadBalancer") }}
 | 
			
		||||
        {{- include "mongodb.initContainers.autoDiscovery" . | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if and .Values.externalAccess.enabled ( or .Values.externalAccess.service.publicNames  .Values.externalAccess.service.domain ) }}
 | 
			
		||||
        {{- include "mongodb.initContainers.dnsCheck" . | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- include "mongodb.initContainer.prepareLogDir" . | nindent 8 }}
 | 
			
		||||
        {{- if .Values.tls.enabled }}
 | 
			
		||||
        - name: generate-tls-certs
 | 
			
		||||
          image: {{ include "mongodb.tls.image" . }}
 | 
			
		||||
          imagePullPolicy: {{ .Values.tls.image.pullPolicy | quote }}
 | 
			
		||||
          env:
 | 
			
		||||
            - name: MY_POD_NAMESPACE
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.namespace
 | 
			
		||||
            - name: MY_POD_HOST_IP
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: status.hostIP
 | 
			
		||||
            - name: MY_POD_NAME
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.name
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            {{- if (include "mongodb.autoGenerateCerts" .) }}
 | 
			
		||||
            - name: certs-volume
 | 
			
		||||
              mountPath: /certs/CAs
 | 
			
		||||
            {{- else }}
 | 
			
		||||
            {{- range $index, $_ := .Values.tls.replicaset.existingSecrets }}
 | 
			
		||||
            - name: mongodb-certs-{{ $index }}
 | 
			
		||||
              mountPath: /certs-{{ $index }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: certs
 | 
			
		||||
              mountPath: /certs
 | 
			
		||||
            - name: common-scripts
 | 
			
		||||
              mountPath: /bitnami/scripts
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /tmp
 | 
			
		||||
              subPath: tmp-dir
 | 
			
		||||
          command:
 | 
			
		||||
            - /bitnami/scripts/generate-certs.sh
 | 
			
		||||
          args:
 | 
			
		||||
            - -s {{ include "mongodb.service.nameOverride" . }}
 | 
			
		||||
            {{- if .Values.externalAccess.service.loadBalancerIPs }}
 | 
			
		||||
            - -i {{ join "," .Values.externalAccess.service.loadBalancerIPs }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if or .Values.tls.extraDnsNames .Values.externalAccess.service.publicNames }}
 | 
			
		||||
            - -n {{ join "," ( concat .Values.tls.extraDnsNames .Values.externalAccess.service.publicNames ) }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- if .Values.tls.resources }}
 | 
			
		||||
          resources: {{- include "common.tplvalues.render" (dict "value" .Values.tls.resources "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if ne .Values.tls.resourcesPreset "none" }}
 | 
			
		||||
          resources: {{- include "common.resources.preset" (dict "type" .Values.tls.resourcesPreset) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.tls.securityContext }}
 | 
			
		||||
          securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.tls.securityContext "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      containers:
 | 
			
		||||
        - name: mongodb
 | 
			
		||||
          image: {{ include "mongodb.image" . }}
 | 
			
		||||
          imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
 | 
			
		||||
          {{- if .Values.containerSecurityContext.enabled }}
 | 
			
		||||
          securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.containerSecurityContext "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.command }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else }}
 | 
			
		||||
          command:
 | 
			
		||||
            - /scripts/setup.sh
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.args }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.lifecycleHooks }}
 | 
			
		||||
          lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.lifecycleHooks "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          env:
 | 
			
		||||
            - name: BITNAMI_DEBUG
 | 
			
		||||
              value: {{ ternary "true" "false" (or .Values.image.debug .Values.diagnosticMode.enabled) | quote }}
 | 
			
		||||
            {{- if and .Values.externalAccess.enabled .Values.externalAccess.autoDiscovery.enabled (eq .Values.externalAccess.service.type "LoadBalancer") }}
 | 
			
		||||
            - name: SHARED_FILE
 | 
			
		||||
              value: "/shared/info.txt"
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: MY_POD_NAME
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.name
 | 
			
		||||
            - name: MY_POD_NAMESPACE
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.namespace
 | 
			
		||||
            - name: MY_POD_HOST_IP
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: status.hostIP
 | 
			
		||||
            - name: MONGODB_INITIAL_PRIMARY_HOST
 | 
			
		||||
              value: {{ include "mongodb.initialPrimaryHost" . | quote }}
 | 
			
		||||
            - name: MONGODB_REPLICA_SET_NAME
 | 
			
		||||
              value: {{ .Values.replicaSetName | quote }}
 | 
			
		||||
            {{- if and .Values.replicaSetHostnames (not .Values.externalAccess.enabled) }}
 | 
			
		||||
            - name: MONGODB_ADVERTISED_HOSTNAME
 | 
			
		||||
              value: "$(MY_POD_NAME).{{ include "mongodb.service.nameOverride" . }}.$(MY_POD_NAMESPACE).svc.{{ .Values.clusterDomain }}"
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- $customUsers := include "mongodb.customUsers" . -}}
 | 
			
		||||
            {{- $customDatabases := include "mongodb.customDatabases" . -}}
 | 
			
		||||
            {{- if not (empty $customUsers) }}
 | 
			
		||||
            - name: MONGODB_EXTRA_USERNAMES
 | 
			
		||||
              value: {{ $customUsers | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if not (empty $customDatabases) }}
 | 
			
		||||
            - name: MONGODB_EXTRA_DATABASES
 | 
			
		||||
              value: {{ $customDatabases | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.auth.enabled }}
 | 
			
		||||
            {{- if and (not (empty $customUsers)) (not (empty $customDatabases)) }}
 | 
			
		||||
            - name: MONGODB_EXTRA_PASSWORDS
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-passwords
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: MONGODB_ROOT_USER
 | 
			
		||||
              value: {{ .Values.auth.rootUser | quote }}
 | 
			
		||||
            - name: MONGODB_ROOT_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-root-password
 | 
			
		||||
            - name: MONGODB_REPLICA_SET_KEY
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-replica-set-key
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if and .Values.metrics.enabled (not (empty .Values.metrics.username)) }}
 | 
			
		||||
            - name: MONGODB_METRICS_USERNAME
 | 
			
		||||
              value: {{ .Values.metrics.username | quote }}
 | 
			
		||||
            {{- if .Values.auth.enabled }}
 | 
			
		||||
            - name: MONGODB_METRICS_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-metrics-password
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: ALLOW_EMPTY_PASSWORD
 | 
			
		||||
              value: {{ ternary "no" "yes" .Values.auth.enabled | quote }}
 | 
			
		||||
            - name: MONGODB_SYSTEM_LOG_VERBOSITY
 | 
			
		||||
              value: {{ .Values.systemLogVerbosity | quote }}
 | 
			
		||||
            - name: MONGODB_DISABLE_SYSTEM_LOG
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.disableSystemLog | quote }}
 | 
			
		||||
            - name: MONGODB_DISABLE_JAVASCRIPT
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.disableJavascript | quote }}
 | 
			
		||||
            - name: MONGODB_ENABLE_JOURNAL
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.enableJournal | quote  }}
 | 
			
		||||
            - name: MONGODB_PORT_NUMBER
 | 
			
		||||
              value: {{ .Values.containerPorts.mongodb | quote }}
 | 
			
		||||
            - name: MONGODB_ENABLE_IPV6
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.enableIPv6 | quote }}
 | 
			
		||||
            - name: MONGODB_ENABLE_DIRECTORY_PER_DB
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.directoryPerDB | quote }}
 | 
			
		||||
            {{- $extraFlags := .Values.extraFlags | join " " -}}
 | 
			
		||||
            {{- if .Values.tls.enabled }}
 | 
			
		||||
              {{- if .Values.tls.mTLS.enabled }}
 | 
			
		||||
              {{- $extraFlags = printf "--tlsCAFile=/certs/mongodb-ca-cert %s" $extraFlags  }}
 | 
			
		||||
              {{- end }}
 | 
			
		||||
              {{- $extraFlags = printf "--tlsMode=%s --tlsCertificateKeyFile=/certs/mongodb.pem %s" .Values.tls.mode $extraFlags  }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if ne $extraFlags "" }}
 | 
			
		||||
            - name: MONGODB_EXTRA_FLAGS
 | 
			
		||||
              value: {{ $extraFlags | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.tls.enabled }}
 | 
			
		||||
            - name: MONGODB_CLIENT_EXTRA_FLAGS
 | 
			
		||||
              value: --tls {{ if .Values.tls.mTLS.enabled }}--tlsCertificateKeyFile=/certs/mongodb.pem {{ end }}--tlsCAFile=/certs/mongodb-ca-cert
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.extraEnvVars }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.extraEnvVars "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- if or .Values.extraEnvVarsCM .Values.extraEnvVarsSecret }}
 | 
			
		||||
          envFrom:
 | 
			
		||||
            {{- if .Values.extraEnvVarsCM }}
 | 
			
		||||
            - configMapRef:
 | 
			
		||||
                name: {{ tpl .Values.extraEnvVarsCM . | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.extraEnvVarsSecret }}
 | 
			
		||||
            - secretRef:
 | 
			
		||||
                name: {{ tpl .Values.extraEnvVarsSecret . | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          ports:
 | 
			
		||||
            - name: mongodb
 | 
			
		||||
              containerPort: {{ .Values.containerPorts.mongodb }}
 | 
			
		||||
          {{- if not .Values.diagnosticMode.enabled }}
 | 
			
		||||
          {{- if .Values.customLivenessProbe }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customLivenessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.livenessProbe.enabled }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.livenessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            exec:
 | 
			
		||||
              command:
 | 
			
		||||
                - /bitnami/scripts/ping-mongodb.sh
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.customReadinessProbe }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customReadinessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.readinessProbe.enabled }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.readinessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            exec:
 | 
			
		||||
              command:
 | 
			
		||||
                - /bitnami/scripts/readiness-probe.sh
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.customStartupProbe }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customStartupProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.startupProbe.enabled }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.startupProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            exec:
 | 
			
		||||
              command:
 | 
			
		||||
                - /bitnami/scripts/startup-probe.sh
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.resources }}
 | 
			
		||||
          resources: {{- include "common.tplvalues.render" (dict "value" .Values.resources "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if ne .Values.resourcesPreset "none" }}
 | 
			
		||||
          resources: {{- include "common.resources.preset" (dict "type" .Values.resourcesPreset) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /tmp
 | 
			
		||||
              subPath: tmp-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/conf
 | 
			
		||||
              subPath: app-conf-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/tmp
 | 
			
		||||
              subPath: app-tmp-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/logs
 | 
			
		||||
              subPath: app-logs-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /.mongodb
 | 
			
		||||
              subPath: mongosh-home
 | 
			
		||||
            - name: {{ .Values.persistence.name | default "datadir" }}
 | 
			
		||||
              mountPath: {{ .Values.persistence.mountPath }}
 | 
			
		||||
              subPath: {{ .Values.persistence.subPath }}
 | 
			
		||||
            - name: common-scripts
 | 
			
		||||
              mountPath: /bitnami/scripts
 | 
			
		||||
            {{- if or .Values.initdbScriptsConfigMap .Values.initdbScripts }}
 | 
			
		||||
            - name: custom-init-scripts
 | 
			
		||||
              mountPath: /docker-entrypoint-initdb.d
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if or .Values.configuration .Values.existingConfigmap }}
 | 
			
		||||
            - name: config
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/conf/mongodb.conf
 | 
			
		||||
              subPath: mongodb.conf
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: scripts
 | 
			
		||||
              mountPath: /scripts/setup.sh
 | 
			
		||||
              subPath: setup.sh
 | 
			
		||||
            {{ if .Values.replicaSetConfigurationSettings.enabled }}
 | 
			
		||||
            - name: scripts
 | 
			
		||||
              mountPath: /scripts/replicaSetConfigurationSettings.sh
 | 
			
		||||
              subPath: replicaSetConfigurationSettings.sh
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if and .Values.externalAccess.enabled .Values.externalAccess.autoDiscovery.enabled (eq .Values.externalAccess.service.type "LoadBalancer") }}
 | 
			
		||||
            - name: shared
 | 
			
		||||
              mountPath: /shared
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.tls.enabled }}
 | 
			
		||||
            - name: certs
 | 
			
		||||
              mountPath: /certs
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.extraVolumeMounts }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.extraVolumeMounts "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
        {{- if .Values.metrics.enabled }}
 | 
			
		||||
        - name: metrics
 | 
			
		||||
          image: {{ template "mongodb.metrics.image" . }}
 | 
			
		||||
          imagePullPolicy: {{ .Values.metrics.image.pullPolicy | quote }}
 | 
			
		||||
          {{- if .Values.containerSecurityContext.enabled }}
 | 
			
		||||
          securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.containerSecurityContext "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.command }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else }}
 | 
			
		||||
          command:
 | 
			
		||||
            - /bin/bash
 | 
			
		||||
            - -ec
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.args }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else }}
 | 
			
		||||
          args:
 | 
			
		||||
            - |
 | 
			
		||||
              /bin/mongodb_exporter {{ include "mongodb.exporterArgs" $ }} --mongodb.direct-connect --mongodb.global-conn-pool --web.listen-address ":{{ .Values.metrics.containerPort }}" --mongodb.uri "{{ include "mongodb.mongodb_exporter.uri" . }}" {{ .Values.metrics.extraFlags }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          env:
 | 
			
		||||
            {{- if .Values.auth.enabled }}
 | 
			
		||||
            {{- if not .Values.metrics.username }}
 | 
			
		||||
            - name: MONGODB_ROOT_USER
 | 
			
		||||
              value: {{ .Values.auth.rootUser | quote }}
 | 
			
		||||
            - name: MONGODB_ROOT_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-root-password
 | 
			
		||||
            {{- else }}
 | 
			
		||||
            - name: MONGODB_METRICS_USERNAME
 | 
			
		||||
              value: {{ .Values.metrics.username | quote }}
 | 
			
		||||
            - name: MONGODB_METRICS_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-metrics-password
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /tmp
 | 
			
		||||
              subPath: tmp-dir
 | 
			
		||||
            {{- if .Values.tls.enabled }}
 | 
			
		||||
            - name: certs
 | 
			
		||||
              mountPath: /certs
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.metrics.extraVolumeMounts }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.metrics.extraVolumeMounts "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          ports:
 | 
			
		||||
            - name: metrics
 | 
			
		||||
              containerPort: {{ .Values.metrics.containerPort }}
 | 
			
		||||
          {{- if not .Values.diagnosticMode.enabled }}
 | 
			
		||||
          {{- if .Values.metrics.customLivenessProbe }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.customLivenessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.livenessProbe.enabled }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.metrics.livenessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            tcpSocket:
 | 
			
		||||
              port: metrics
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.metrics.customReadinessProbe }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.customReadinessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.readinessProbe.enabled }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.metrics.readinessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            httpGet:
 | 
			
		||||
              path: /
 | 
			
		||||
              port: metrics
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.metrics.customStartupProbe }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.customStartupProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.startupProbe.enabled }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.metrics.startupProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            tcpSocket:
 | 
			
		||||
              port: metrics
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.metrics.resources }}
 | 
			
		||||
          resources: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.resources "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if ne .Values.metrics.resourcesPreset "none" }}
 | 
			
		||||
          resources: {{- include "common.resources.preset" (dict "type" .Values.metrics.resourcesPreset) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.sidecars }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.sidecars "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      volumes:
 | 
			
		||||
        - name: empty-dir
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
        - name: common-scripts
 | 
			
		||||
          configMap:
 | 
			
		||||
            name: {{ printf "%s-common-scripts" (include "mongodb.fullname" .) }}
 | 
			
		||||
            defaultMode: 0o550
 | 
			
		||||
        {{- if or .Values.initdbScriptsConfigMap .Values.initdbScripts }}
 | 
			
		||||
        - name: custom-init-scripts
 | 
			
		||||
          configMap:
 | 
			
		||||
            name: {{ template "mongodb.initdbScriptsCM" . }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if or .Values.configuration .Values.existingConfigmap }}
 | 
			
		||||
        - name: config
 | 
			
		||||
          configMap:
 | 
			
		||||
            name: {{ include "mongodb.configmapName" . }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if and .Values.externalAccess.enabled .Values.externalAccess.autoDiscovery.enabled (eq .Values.externalAccess.service.type "LoadBalancer") }}
 | 
			
		||||
        - name: shared
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        - name: scripts
 | 
			
		||||
          configMap:
 | 
			
		||||
            name: {{ printf "%s-scripts" (include "mongodb.fullname" .) }}
 | 
			
		||||
            defaultMode: 0o755
 | 
			
		||||
        {{- if .Values.extraVolumes }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.extraVolumes "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.tls.enabled }}
 | 
			
		||||
        - name: certs
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
        {{- if (include "mongodb.autoGenerateCerts" .) }}
 | 
			
		||||
        - name: certs-volume
 | 
			
		||||
          secret:
 | 
			
		||||
            secretName: {{ template "mongodb.tlsSecretName" . }}
 | 
			
		||||
            items:
 | 
			
		||||
            - key: mongodb-ca-cert
 | 
			
		||||
              path: mongodb-ca-cert
 | 
			
		||||
              mode: 0o600
 | 
			
		||||
            - key: mongodb-ca-key
 | 
			
		||||
              path: mongodb-ca-key
 | 
			
		||||
              mode: 0o600
 | 
			
		||||
        {{- else }}
 | 
			
		||||
        {{- range $index, $secret := .Values.tls.replicaset.existingSecrets }}
 | 
			
		||||
        - name: mongodb-certs-{{ $index }}
 | 
			
		||||
          secret:
 | 
			
		||||
            secretName: {{ include "common.tplvalues.render" ( dict "value" $secret "context" $) }}
 | 
			
		||||
            defaultMode: 256
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
  {{- if not .Values.persistence.enabled }}
 | 
			
		||||
        - name: datadir
 | 
			
		||||
          {{- if .Values.persistence.medium }}
 | 
			
		||||
          emptyDir:
 | 
			
		||||
            medium: {{ .Values.persistence.medium | quote }}
 | 
			
		||||
          {{- else }}
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
  {{- else }}
 | 
			
		||||
  {{- if .Values.persistentVolumeClaimRetentionPolicy.enabled }}
 | 
			
		||||
  persistentVolumeClaimRetentionPolicy:
 | 
			
		||||
    whenDeleted: {{ .Values.persistentVolumeClaimRetentionPolicy.whenDeleted }}
 | 
			
		||||
    whenScaled: {{ .Values.persistentVolumeClaimRetentionPolicy.whenScaled }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  volumeClaimTemplates:
 | 
			
		||||
    - apiVersion: v1
 | 
			
		||||
      kind: PersistentVolumeClaim
 | 
			
		||||
      metadata:
 | 
			
		||||
        name: datadir
 | 
			
		||||
        {{- if .Values.persistence.annotations }}
 | 
			
		||||
        annotations: {{- include "common.tplvalues.render" (dict "value" .Values.persistence.annotations "context" $) | nindent 10 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.persistence.labels }}
 | 
			
		||||
        labels: {{- include "common.tplvalues.render" (dict "value" .Values.persistence.labels "context" $) | nindent 10 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      spec:
 | 
			
		||||
        accessModes:
 | 
			
		||||
        {{- range .Values.persistence.accessModes }}
 | 
			
		||||
          - {{ . | quote }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        resources:
 | 
			
		||||
          requests:
 | 
			
		||||
            storage: {{ .Values.persistence.size | quote }}
 | 
			
		||||
            {{- if .Values.persistence.volumeClaimTemplates.requests }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.persistence.volumeClaimTemplates.requests "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
        {{- if .Values.persistence.volumeClaimTemplates.dataSource }}
 | 
			
		||||
        dataSource: {{- include "common.tplvalues.render" (dict "value" .Values.persistence.volumeClaimTemplates.dataSource "context" $) | nindent 10 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.persistence.volumeClaimTemplates.selector }}
 | 
			
		||||
        selector: {{- include "common.tplvalues.render" (dict "value" .Values.persistence.volumeClaimTemplates.selector "context" $) | nindent 10 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{ include "common.storage.class" (dict "persistence" .Values.persistence "global" .Values.global) }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										41
									
								
								opencloud/charts/mongodb/templates/replicaset/svc.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								opencloud/charts/mongodb/templates/replicaset/svc.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and (eq .Values.architecture "replicaset") .Values.externalAccess.enabled (eq .Values.externalAccess.service.type "ClusterIP") }}
 | 
			
		||||
 | 
			
		||||
{{- $fullName := include "mongodb.fullname" . }}
 | 
			
		||||
{{- $replicaCount := .Values.replicaCount | int }}
 | 
			
		||||
{{- $root := . }}
 | 
			
		||||
 | 
			
		||||
{{- range $i, $e := until $replicaCount }}
 | 
			
		||||
{{- $targetPod := printf "%s-%d" (printf "%s" $fullName) $i }}
 | 
			
		||||
{{- $_ := set $ "targetPod" $targetPod }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-%d" $fullName $i }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" $ }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" $root.Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if or $root.Values.service.annotations $root.Values.commonAnnotations }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list $root.Values.service.annotations $root.Values.commonAnnotations ) "context" $ ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  type: ClusterIP
 | 
			
		||||
  ports:
 | 
			
		||||
    - name: {{ $root.Values.service.portName | quote }}
 | 
			
		||||
      port: {{ $root.Values.service.ports.mongodb }}
 | 
			
		||||
      targetPort: mongodb
 | 
			
		||||
    {{- if $root.Values.service.extraPorts }}
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" $root.Values.service.extraPorts "context" $) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list $root.Values.podLabels $root.Values.commonLabels ) "context" $ ) }}
 | 
			
		||||
  selector: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
    statefulset.kubernetes.io/pod-name: {{ $targetPod }}
 | 
			
		||||
---
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										31
									
								
								opencloud/charts/mongodb/templates/role.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								opencloud/charts/mongodb/templates/role.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if .Values.rbac.create }}
 | 
			
		||||
apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }}
 | 
			
		||||
kind: Role
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
rules:
 | 
			
		||||
  - apiGroups:
 | 
			
		||||
      - ""
 | 
			
		||||
    resources:
 | 
			
		||||
      - services
 | 
			
		||||
    verbs:
 | 
			
		||||
      - get
 | 
			
		||||
      - list
 | 
			
		||||
      - watch
 | 
			
		||||
{{- if .Values.rbac.rules }}
 | 
			
		||||
{{- include "common.tplvalues.render" ( dict "value" .Values.rbac.rules "context" $ ) | nindent 2 }}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- if and (include "common.capabilities.psp.supported" .) .Values.podSecurityPolicy.create }}
 | 
			
		||||
  - apiGroups: ['{{ template "podSecurityPolicy.apiGroup" . }}']
 | 
			
		||||
    resources: ['podsecuritypolicies']
 | 
			
		||||
    verbs: ['use']
 | 
			
		||||
    resourceNames: [{{ include "mongodb.fullname" . }}]
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										21
									
								
								opencloud/charts/mongodb/templates/rolebinding.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								opencloud/charts/mongodb/templates/rolebinding.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and .Values.serviceAccount.create .Values.rbac.create }}
 | 
			
		||||
apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }}
 | 
			
		||||
kind: RoleBinding
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
roleRef:
 | 
			
		||||
  kind: Role
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  apiGroup: rbac.authorization.k8s.io
 | 
			
		||||
subjects:
 | 
			
		||||
  - kind: ServiceAccount
 | 
			
		||||
    name: {{ include "mongodb.serviceAccountName" . }}
 | 
			
		||||
    namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										33
									
								
								opencloud/charts/mongodb/templates/secrets-ca.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								opencloud/charts/mongodb/templates/secrets-ca.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if (include "mongodb.createTlsSecret" .) }}
 | 
			
		||||
{{- $secretName := printf "%s" (include "mongodb.tlsSecretName" .) }}
 | 
			
		||||
{{- $fullname := include "mongodb.fullname" . }}
 | 
			
		||||
{{- $releaseNamespace := .Release.Namespace }}
 | 
			
		||||
{{- $clusterDomain := .Values.clusterDomain }}
 | 
			
		||||
{{- $cn := printf "%s.%s.svc.%s" $fullname .Release.Namespace $clusterDomain }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Secret
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ $secretName }}
 | 
			
		||||
  namespace: {{ template "mongodb.namespace" . }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
type: Opaque
 | 
			
		||||
data:
 | 
			
		||||
  {{- if or .Values.tls.caCert .Values.tls.caKey (not .Values.tls.autoGenerated) }}
 | 
			
		||||
  {{- $ca := buildCustomCert (required "A valid .Values.tls.caCert is required!" .Values.tls.caCert) (required "A valid .Values.tls.caKey is required!" .Values.tls.caKey) }}
 | 
			
		||||
  mongodb-ca-cert: {{ b64enc $ca.Cert }}
 | 
			
		||||
  mongodb-ca-key: {{ b64enc $ca.Key }}
 | 
			
		||||
  {{- else }}
 | 
			
		||||
  {{- $ca := genCA "myMongo-ca" 3650 }}
 | 
			
		||||
  mongodb-ca-cert: {{ include "common.secrets.lookup" (dict "secret" $secretName "key" "mongodb-ca-cert" "defaultValue" $ca.Cert "context" $) }}
 | 
			
		||||
  mongodb-ca-key: {{ include "common.secrets.lookup" (dict "secret" $secretName "key" "mongodb-ca-key" "defaultValue" $ca.Key "context" $) }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										128
									
								
								opencloud/charts/mongodb/templates/secrets.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								opencloud/charts/mongodb/templates/secrets.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,128 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if .Values.auth.enabled }}
 | 
			
		||||
{{- $replicaCount := int .Values.replicaCount }}
 | 
			
		||||
{{- $port := .Values.service.ports.mongodb }}
 | 
			
		||||
{{- $host := include "mongodb.service.nameOverride" . }}
 | 
			
		||||
{{- $hostForURI := printf "%s:%s" (include "mongodb.service.nameOverride" .) (print $port) }}
 | 
			
		||||
{{- if (eq .Values.architecture "replicaset") }}
 | 
			
		||||
  {{- $fullname := include "mongodb.fullname" . }}
 | 
			
		||||
  {{- $releaseNamespace := include "mongodb.namespace" . }}
 | 
			
		||||
  {{- $clusterDomain := .Values.clusterDomain }}
 | 
			
		||||
  {{- $mongoList := list }}
 | 
			
		||||
  {{- $mongoOnlyHostList := list }}
 | 
			
		||||
  {{- range $e, $i := until $replicaCount }}
 | 
			
		||||
  {{- $mongoOnlyHostList = append $mongoList (printf "%s-%d.%s-headless.%s.svc.%s" $fullname $i $fullname $releaseNamespace $clusterDomain) }}
 | 
			
		||||
  {{- $mongoList = append $mongoList (printf "%s-%d.%s-headless.%s.svc.%s:%s" $fullname $i $fullname $releaseNamespace $clusterDomain (print $port)) }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- $host = (join "," $mongoOnlyHostList) }}
 | 
			
		||||
  {{- $hostForURI = (join "," $mongoList) }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
 | 
			
		||||
{{/* Root user section.  */}}
 | 
			
		||||
{{- $rootPassword := include "common.secrets.passwords.manage" (dict "secret" (include "mongodb.secretName" .) "key" "mongodb-root-password" "providedValues" (list "auth.rootPassword" ) "honorProvidedValues" true "context" $) | trimAll "\"" | b64dec }}
 | 
			
		||||
 | 
			
		||||
{{/* Custom user section. This chart allows creating multiple users */}}
 | 
			
		||||
{{- $customUsers := include "mongodb.customUsers" . }}
 | 
			
		||||
{{- $customDatabases := include "mongodb.customDatabases" . }}
 | 
			
		||||
{{- $customPasswords := include "mongodb.customPasswords" . }}
 | 
			
		||||
{{- $passwords := "" }}
 | 
			
		||||
{{- $passwordList := list -}}
 | 
			
		||||
{{- $customUsersList := list }}
 | 
			
		||||
{{- $customDatabasesList := list }}
 | 
			
		||||
{{- $customPasswordsList := list }}
 | 
			
		||||
{{- if and (not (empty $customUsers)) (not (empty $customDatabases)) }}
 | 
			
		||||
{{- $customUsersList = splitList "," $customUsers }}
 | 
			
		||||
{{- $customDatabasesList = splitList "," $customDatabases }}
 | 
			
		||||
{{- if not (empty $customPasswords) }}
 | 
			
		||||
{{- $passwordList = $customPasswords }}
 | 
			
		||||
{{- $customPasswordsList = splitList "," $customPasswords }}
 | 
			
		||||
{{- else }}
 | 
			
		||||
{{- range $customUsersList }}
 | 
			
		||||
{{- $customPasswordsList = append $customPasswordsList (randAlphaNum 10) }}
 | 
			
		||||
{{- end -}}
 | 
			
		||||
{{- $passwordList = (join "," $customPasswordsList) }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- $passwords = include "common.secrets.passwords.manage" (dict "secret" (include "mongodb.secretName" .) "key" "mongodb-passwords" "providedValues" (list "mongodbPasswords") "honorProvidedValues" true "context" (set (deepCopy $) "Values" (dict "mongodbPasswords" $passwordList))) | trimAll "\"" | b64dec }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
 | 
			
		||||
{{- if (include "mongodb.createSecret" .) }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Secret
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  namespace: {{ template "mongodb.namespace" . }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
type: Opaque
 | 
			
		||||
data:
 | 
			
		||||
  mongodb-root-password: {{ print $rootPassword | b64enc | quote }}
 | 
			
		||||
  {{- if and (not (empty $customUsers)) (not (empty $customDatabases)) }}
 | 
			
		||||
  mongodb-passwords: {{ print $passwords | b64enc | quote }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if .Values.metrics.username }}
 | 
			
		||||
  mongodb-metrics-password: {{ include "common.secrets.passwords.manage" (dict "secret" (include "mongodb.fullname" .) "key" "mongodb-metrics-password" "providedValues" (list "metrics.password" ) "honorProvidedValues" true "context" $) }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if eq .Values.architecture "replicaset" }}
 | 
			
		||||
  mongodb-replica-set-key: {{ include "common.secrets.passwords.manage" (dict "secret" (include "mongodb.fullname" .) "key" "mongodb-replica-set-key" "providedValues" (list "auth.replicaSetKey" ) "honorProvidedValues" true "context" $) }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- if .Values.serviceBindings.enabled }}
 | 
			
		||||
---
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Secret
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "common.names.fullname" . }}-svcbind-root
 | 
			
		||||
  namespace: {{ .Release.Namespace | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
type: servicebinding.io/mongodb
 | 
			
		||||
data:
 | 
			
		||||
  provider: {{ print "bitnami" | b64enc | quote }}
 | 
			
		||||
  type: {{ print "mongodb" | b64enc | quote }}
 | 
			
		||||
  host: {{ print $host | b64enc | quote }}
 | 
			
		||||
  port: {{ print $port | b64enc | quote }}
 | 
			
		||||
  username: {{ print .Values.auth.rootUser | b64enc | quote }}
 | 
			
		||||
  password: {{ print $rootPassword | b64enc | quote }}
 | 
			
		||||
  database: {{ print "admin" | b64enc | quote }}
 | 
			
		||||
  uri: {{ printf "mongodb://%s:%s@%s/admin" .Values.auth.rootUser $rootPassword $hostForURI | b64enc | quote }}
 | 
			
		||||
{{- range $e, $i := until (len $customUsersList) }}
 | 
			
		||||
---
 | 
			
		||||
{{- $currentSecret := printf "%s-svcbind-%d" (include "common.names.fullname" $) $i }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Secret
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ $currentSecret }}
 | 
			
		||||
  namespace: {{ $.Release.Namespace | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" $.Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- if $.Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $.Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
type: servicebinding.io/mongodb
 | 
			
		||||
data:
 | 
			
		||||
  {{- $currentUser := index $customUsersList $i }}
 | 
			
		||||
  {{- $currentDatabase := last $customDatabasesList }}
 | 
			
		||||
  {{- if gt (len $customDatabasesList) $i }}
 | 
			
		||||
  {{- $currentDatabase = index $customDatabasesList $i }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- $currentProvidedPassword := index $customPasswordsList $i }}
 | 
			
		||||
  {{- $currentPassword := include "common.secrets.lookup" (dict "secret" $currentSecret "key" "password" "defaultValue" $currentProvidedPassword "context" $) | b64dec }}
 | 
			
		||||
  provider: {{ print "bitnami" | b64enc | quote }}
 | 
			
		||||
  type: {{ print "mongodb" | b64enc | quote }}
 | 
			
		||||
  host: {{ print $host | b64enc | quote }}
 | 
			
		||||
  port: {{ print $port | b64enc | quote }}
 | 
			
		||||
  username: {{ print $currentUser | b64enc | quote }}
 | 
			
		||||
  password: {{ print $currentPassword | b64enc | quote }}
 | 
			
		||||
  database: {{ print $currentDatabase | b64enc | quote }}
 | 
			
		||||
  uri: {{ printf "mongodb://%s:%s@%s/%s" $currentUser $currentPassword $hostForURI $currentDatabase | b64enc | quote }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										20
									
								
								opencloud/charts/mongodb/templates/serviceaccount.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								opencloud/charts/mongodb/templates/serviceaccount.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if .Values.serviceAccount.create }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: ServiceAccount
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.serviceAccountName" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- if or .Values.serviceAccount.annotations .Values.commonAnnotations }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.serviceAccount.annotations .Values.commonAnnotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
secrets:
 | 
			
		||||
  - name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
automountServiceAccountToken: {{ .Values.serviceAccount.automountServiceAccountToken }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										48
									
								
								opencloud/charts/mongodb/templates/servicemonitor.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								opencloud/charts/mongodb/templates/servicemonitor.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and .Values.metrics.enabled .Values.metrics.serviceMonitor.enabled }}
 | 
			
		||||
apiVersion: monitoring.coreos.com/v1
 | 
			
		||||
kind: ServiceMonitor
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.serviceMonitor.namespace" . }}
 | 
			
		||||
  {{- $labels := include "common.tplvalues.merge" ( dict "values" ( list .Values.metrics.serviceMonitor.labels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" $labels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: metrics
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  {{- if .Values.metrics.serviceMonitor.jobLabel }}
 | 
			
		||||
  jobLabel: {{ .Values.metrics.serviceMonitor.jobLabel }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 6 }}
 | 
			
		||||
      {{- if .Values.metrics.serviceMonitor.selector }}
 | 
			
		||||
      {{- include "common.tplvalues.render" (dict "value" .Values.metrics.serviceMonitor.selector "context" $) | nindent 6 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      app.kubernetes.io/component: metrics
 | 
			
		||||
  endpoints:
 | 
			
		||||
    - port: http-metrics
 | 
			
		||||
      {{- if .Values.metrics.serviceMonitor.interval }}
 | 
			
		||||
      interval: {{ .Values.metrics.serviceMonitor.interval }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.metrics.serviceMonitor.scrapeTimeout }}
 | 
			
		||||
      scrapeTimeout: {{ .Values.metrics.serviceMonitor.scrapeTimeout }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.metrics.serviceMonitor.relabelings }}
 | 
			
		||||
      relabelings: {{- include "common.tplvalues.render" ( dict "value" .Values.metrics.serviceMonitor.relabelings "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.metrics.serviceMonitor.metricRelabelings }}
 | 
			
		||||
      metricRelabelings: {{- include "common.tplvalues.render" ( dict "value" .Values.metrics.serviceMonitor.metricRelabelings "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.metrics.serviceMonitor.honorLabels }}
 | 
			
		||||
      honorLabels: {{ .Values.metrics.serviceMonitor.honorLabels }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
  namespaceSelector:
 | 
			
		||||
    matchNames:
 | 
			
		||||
      - "{{ include "mongodb.namespace" . }}"
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										501
									
								
								opencloud/charts/mongodb/templates/standalone/dep-sts.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										501
									
								
								opencloud/charts/mongodb/templates/standalone/dep-sts.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,501 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if not (eq .Values.architecture "replicaset") }}
 | 
			
		||||
apiVersion: {{ if .Values.useStatefulSet }}{{ include "common.capabilities.statefulset.apiVersion" . }}{{- else }}{{ include "common.capabilities.deployment.apiVersion" . }}{{- end }}
 | 
			
		||||
kind: {{ if .Values.useStatefulSet }}StatefulSet{{- else }}Deployment{{- end }}
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  {{- $labels := include "common.tplvalues.merge" ( dict "values" ( list .Values.labels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" $labels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if or .Values.annotations .Values.commonAnnotations }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.annotations .Values.commonAnnotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  replicas: {{ gt (.Values.replicaCount | int) 1 | ternary 1 .Values.replicaCount }}
 | 
			
		||||
  {{- if .Values.useStatefulSet }}
 | 
			
		||||
  serviceName: {{ include "mongodb.service.nameOverride" . }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if .Values.updateStrategy}}
 | 
			
		||||
  {{- if .Values.useStatefulSet }}
 | 
			
		||||
  updateStrategy:
 | 
			
		||||
  {{- else }}
 | 
			
		||||
  strategy:
 | 
			
		||||
  {{- end }}
 | 
			
		||||
    {{- toYaml .Values.updateStrategy | nindent 4 }}
 | 
			
		||||
  {{- end}}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
 | 
			
		||||
      app.kubernetes.io/component: mongodb
 | 
			
		||||
  template:
 | 
			
		||||
    metadata:
 | 
			
		||||
      labels: {{- include "common.labels.standard" ( dict "customLabels" $podLabels "context" $ ) | nindent 8 }}
 | 
			
		||||
        app.kubernetes.io/component: mongodb
 | 
			
		||||
      {{- if or (include "mongodb.createConfigmap" .) .Values.podAnnotations .Values.passwordUpdateJob.enabled }}
 | 
			
		||||
      annotations:
 | 
			
		||||
        {{- if (include "mongodb.createConfigmap" .) }}
 | 
			
		||||
        checksum/configuration: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.passwordUpdateJob.enabled }}
 | 
			
		||||
        charts.bitnami.com/password-last-update: {{ now | date "20060102150405" | quote }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.podAnnotations }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.podAnnotations "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
    spec:
 | 
			
		||||
      {{- include "mongodb.imagePullSecrets" . | nindent 6 }}
 | 
			
		||||
      automountServiceAccountToken: {{ .Values.automountServiceAccountToken }}
 | 
			
		||||
      {{- if .Values.hostAliases }}
 | 
			
		||||
      hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.hostAliases "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.schedulerName }}
 | 
			
		||||
      schedulerName: {{ .Values.schedulerName | quote }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      serviceAccountName: {{ template "mongodb.serviceAccountName" . }}
 | 
			
		||||
      {{- if .Values.affinity }}
 | 
			
		||||
      affinity: {{- include "common.tplvalues.render" (dict "value" .Values.affinity "context" $) | nindent 8 }}
 | 
			
		||||
      {{- else }}
 | 
			
		||||
      affinity:
 | 
			
		||||
        podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAffinityPreset "component" "mongodb" "customLabels" $podLabels "topologyKey" .Values.topologyKey "context" $) | nindent 10 }}
 | 
			
		||||
        podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAntiAffinityPreset "component" "mongodb" "customLabels" $podLabels "topologyKey" .Values.topologyKey "context" $) | nindent 10 }}
 | 
			
		||||
        nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.nodeAffinityPreset.type "key" .Values.nodeAffinityPreset.key "values" .Values.nodeAffinityPreset.values) | nindent 10 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.nodeSelector }}
 | 
			
		||||
      nodeSelector: {{- include "common.tplvalues.render" (dict "value" .Values.nodeSelector "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.tolerations }}
 | 
			
		||||
      tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.tolerations "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.priorityClassName }}
 | 
			
		||||
      priorityClassName: {{ .Values.priorityClassName }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.runtimeClassName }}
 | 
			
		||||
      runtimeClassName: {{ .Values.runtimeClassName }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{- if .Values.podSecurityContext.enabled }}
 | 
			
		||||
      securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.podSecurityContext "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      {{ if .Values.terminationGracePeriodSeconds }}
 | 
			
		||||
      terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      enableServiceLinks: {{ .Values.enableServiceLinks }}
 | 
			
		||||
      initContainers:
 | 
			
		||||
        {{- if .Values.initContainers }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if and .Values.volumePermissions.enabled .Values.persistence.enabled }}
 | 
			
		||||
        {{- include "mongodb.initContainer.volumePermissions" . | indent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- include "mongodb.initContainer.prepareLogDir" . | nindent 8 }}
 | 
			
		||||
        {{- if .Values.tls.enabled }}
 | 
			
		||||
        - name: generate-tls-certs
 | 
			
		||||
          image: {{ include "mongodb.tls.image" . }}
 | 
			
		||||
          imagePullPolicy: {{ .Values.tls.image.pullPolicy | quote }}
 | 
			
		||||
          env:
 | 
			
		||||
            - name: MY_POD_NAMESPACE
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: metadata.namespace
 | 
			
		||||
            - name: MY_POD_HOST_IP
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                fieldRef:
 | 
			
		||||
                  fieldPath: status.hostIP
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /tmp
 | 
			
		||||
              subPath: tmp-dir
 | 
			
		||||
            {{- if (include "mongodb.autoGenerateCerts" .) }}
 | 
			
		||||
            - name: certs-volume
 | 
			
		||||
              mountPath: /certs/CAs
 | 
			
		||||
            {{- else }}
 | 
			
		||||
            - name: mongodb-certs-0
 | 
			
		||||
              mountPath: /certs-0
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: certs
 | 
			
		||||
              mountPath: /certs
 | 
			
		||||
            - name: common-scripts
 | 
			
		||||
              mountPath: /bitnami/scripts
 | 
			
		||||
          command:
 | 
			
		||||
            - /bitnami/scripts/generate-certs.sh
 | 
			
		||||
          args:
 | 
			
		||||
            - -s {{ include "mongodb.service.nameOverride" . }}
 | 
			
		||||
            {{- if .Values.externalAccess.service.loadBalancerIPs }}
 | 
			
		||||
            - -i {{ join "," .Values.externalAccess.service.loadBalancerIPs }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if or .Values.tls.extraDnsNames .Values.externalAccess.service.publicNames }}
 | 
			
		||||
            - -n {{ join "," ( concat .Values.tls.extraDnsNames .Values.externalAccess.service.publicNames ) }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- if .Values.tls.resources }}
 | 
			
		||||
          resources: {{- include "common.tplvalues.render" (dict "value" .Values.tls.resources "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if ne .Values.tls.resourcesPreset "none" }}
 | 
			
		||||
          resources: {{- include "common.resources.preset" (dict "type" .Values.tls.resourcesPreset) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.tls.securityContext }}
 | 
			
		||||
          securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.tls.securityContext "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      containers:
 | 
			
		||||
        - name: mongodb
 | 
			
		||||
          image: {{ include "mongodb.image" . }}
 | 
			
		||||
          imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
 | 
			
		||||
          {{- if .Values.containerSecurityContext.enabled }}
 | 
			
		||||
          securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.containerSecurityContext "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.command }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.args }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.lifecycleHooks }}
 | 
			
		||||
          lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.lifecycleHooks "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          env:
 | 
			
		||||
            - name: BITNAMI_DEBUG
 | 
			
		||||
              value: {{ ternary "true" "false" (or .Values.image.debug .Values.diagnosticMode.enabled) | quote }}
 | 
			
		||||
            {{- $customUsers := include "mongodb.customUsers" . -}}
 | 
			
		||||
            {{- $customDatabases := include "mongodb.customDatabases" . -}}
 | 
			
		||||
            {{- if not (empty $customUsers) }}
 | 
			
		||||
            - name: MONGODB_EXTRA_USERNAMES
 | 
			
		||||
              value: {{ $customUsers | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if not (empty $customDatabases) }}
 | 
			
		||||
            - name: MONGODB_EXTRA_DATABASES
 | 
			
		||||
              value: {{ $customDatabases | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.auth.enabled }}
 | 
			
		||||
            {{- if and (not (empty $customUsers)) (not (empty $customDatabases)) }}
 | 
			
		||||
            - name: MONGODB_EXTRA_PASSWORDS
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-passwords
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: MONGODB_ROOT_USER
 | 
			
		||||
              value: {{ .Values.auth.rootUser | quote }}
 | 
			
		||||
            - name: MONGODB_ROOT_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-root-password
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if and .Values.metrics.enabled (not (empty .Values.metrics.username)) }}
 | 
			
		||||
            - name: MONGODB_METRICS_USERNAME
 | 
			
		||||
              value: {{ .Values.metrics.username | quote }}
 | 
			
		||||
            {{- if .Values.auth.enabled }}
 | 
			
		||||
            - name: MONGODB_METRICS_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-metrics-password
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            - name: ALLOW_EMPTY_PASSWORD
 | 
			
		||||
              value: {{ ternary "no" "yes" .Values.auth.enabled | quote }}
 | 
			
		||||
            - name: MONGODB_SYSTEM_LOG_VERBOSITY
 | 
			
		||||
              value: {{ .Values.systemLogVerbosity | quote }}
 | 
			
		||||
            - name: MONGODB_DISABLE_SYSTEM_LOG
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.disableSystemLog | quote }}
 | 
			
		||||
            - name: MONGODB_DISABLE_JAVASCRIPT
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.disableJavascript | quote }}
 | 
			
		||||
            - name: MONGODB_ENABLE_JOURNAL
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.enableJournal | quote  }}
 | 
			
		||||
            - name: MONGODB_PORT_NUMBER
 | 
			
		||||
              value: {{ .Values.containerPorts.mongodb | quote }}
 | 
			
		||||
            - name: MONGODB_ENABLE_IPV6
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.enableIPv6 | quote }}
 | 
			
		||||
            - name: MONGODB_ENABLE_DIRECTORY_PER_DB
 | 
			
		||||
              value: {{ ternary "yes" "no" .Values.directoryPerDB | quote }}
 | 
			
		||||
            {{- $extraFlags := .Values.extraFlags | join " " -}}
 | 
			
		||||
            {{- if .Values.tls.enabled }}
 | 
			
		||||
              {{- if .Values.tls.mTLS.enabled }}
 | 
			
		||||
              {{- $extraFlags = printf "--tlsCAFile=/certs/mongodb-ca-cert %s" $extraFlags  }}
 | 
			
		||||
              {{- end }}
 | 
			
		||||
              {{- $extraFlags = printf "--tlsMode=%s --tlsCertificateKeyFile=/certs/mongodb.pem %s" .Values.tls.mode $extraFlags  }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if ne $extraFlags "" }}
 | 
			
		||||
            - name: MONGODB_EXTRA_FLAGS
 | 
			
		||||
              value: {{ $extraFlags | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.tls.enabled }}
 | 
			
		||||
            - name: MONGODB_CLIENT_EXTRA_FLAGS
 | 
			
		||||
              value: --tls {{ if .Values.tls.mTLS.enabled }}--tlsCertificateKeyFile=/certs/mongodb.pem {{ end }}--tlsCAFile=/certs/mongodb-ca-cert
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.extraEnvVars }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.extraEnvVars "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- if or .Values.extraEnvVarsCM .Values.extraEnvVarsSecret }}
 | 
			
		||||
          envFrom:
 | 
			
		||||
            {{- if .Values.extraEnvVarsCM }}
 | 
			
		||||
            - configMapRef:
 | 
			
		||||
                name: {{ tpl .Values.extraEnvVarsCM . | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.extraEnvVarsSecret }}
 | 
			
		||||
            - secretRef:
 | 
			
		||||
                name: {{ tpl .Values.extraEnvVarsSecret . | quote }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          ports:
 | 
			
		||||
            - name: mongodb
 | 
			
		||||
              containerPort: {{ .Values.containerPorts.mongodb }}
 | 
			
		||||
          {{- if not .Values.diagnosticMode.enabled }}
 | 
			
		||||
          {{- if .Values.customLivenessProbe }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customLivenessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.livenessProbe.enabled }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.livenessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            exec:
 | 
			
		||||
              command:
 | 
			
		||||
                - /bitnami/scripts/ping-mongodb.sh
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if not .Values.diagnosticMode.enabled }}
 | 
			
		||||
          {{- if .Values.customReadinessProbe }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customReadinessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.readinessProbe.enabled }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.readinessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            exec:
 | 
			
		||||
              command:
 | 
			
		||||
                - /bitnami/scripts/readiness-probe.sh
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if not .Values.diagnosticMode.enabled }}
 | 
			
		||||
          {{- if .Values.customStartupProbe }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customStartupProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.startupProbe.enabled }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.startupProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            exec:
 | 
			
		||||
              command:
 | 
			
		||||
                - /bitnami/scripts/startup-probe.sh
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.resources }}
 | 
			
		||||
          resources: {{- include "common.tplvalues.render" (dict "value" .Values.resources "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if ne .Values.resourcesPreset "none" }}
 | 
			
		||||
          resources: {{- include "common.resources.preset" (dict "type" .Values.resourcesPreset) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /tmp
 | 
			
		||||
              subPath: tmp-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/conf
 | 
			
		||||
              subPath: app-conf-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/tmp
 | 
			
		||||
              subPath: app-tmp-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/logs
 | 
			
		||||
              subPath: app-logs-dir
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /.mongodb
 | 
			
		||||
              subPath: mongosh-home
 | 
			
		||||
            - name: {{ .Values.persistence.name | default "datadir" }}
 | 
			
		||||
              mountPath: {{ .Values.persistence.mountPath }}
 | 
			
		||||
              subPath: {{ .Values.persistence.subPath }}
 | 
			
		||||
            - name: common-scripts
 | 
			
		||||
              mountPath: /bitnami/scripts
 | 
			
		||||
            {{- if or .Values.initdbScriptsConfigMap .Values.initdbScripts }}
 | 
			
		||||
            - name: custom-init-scripts
 | 
			
		||||
              mountPath: /docker-entrypoint-initdb.d
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if or .Values.configuration .Values.existingConfigmap }}
 | 
			
		||||
            - name: config
 | 
			
		||||
              mountPath: /opt/bitnami/mongodb/conf/mongodb.conf
 | 
			
		||||
              subPath: mongodb.conf
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.tls.enabled }}
 | 
			
		||||
            - name: certs
 | 
			
		||||
              mountPath: /certs
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.extraVolumeMounts }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.extraVolumeMounts "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
        {{- if .Values.metrics.enabled }}
 | 
			
		||||
        - name: metrics
 | 
			
		||||
          image: {{ template "mongodb.metrics.image" . }}
 | 
			
		||||
          imagePullPolicy: {{ .Values.metrics.image.pullPolicy | quote }}
 | 
			
		||||
          {{- if .Values.containerSecurityContext.enabled }}
 | 
			
		||||
          securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.containerSecurityContext "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.command }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else }}
 | 
			
		||||
          command:
 | 
			
		||||
            - /bin/bash
 | 
			
		||||
            - -ec
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.diagnosticMode.enabled }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.args }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else }}
 | 
			
		||||
          args:
 | 
			
		||||
            - |
 | 
			
		||||
              /bin/mongodb_exporter {{ include "mongodb.exporterArgs" $ }} --mongodb.direct-connect --mongodb.global-conn-pool --web.listen-address ":{{ .Values.metrics.containerPort }}" --mongodb.uri "{{ include "mongodb.mongodb_exporter.uri" . }}" {{ .Values.metrics.extraFlags }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          env:
 | 
			
		||||
            {{- if .Values.auth.enabled }}
 | 
			
		||||
            {{- if not .Values.metrics.username }}
 | 
			
		||||
            - name: MONGODB_ROOT_USER
 | 
			
		||||
              value: {{ .Values.auth.rootUser | quote }}
 | 
			
		||||
            - name: MONGODB_ROOT_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-root-password
 | 
			
		||||
            {{- else }}
 | 
			
		||||
            - name: MONGODB_METRICS_USERNAME
 | 
			
		||||
              value: {{ .Values.metrics.username | quote }}
 | 
			
		||||
            - name: MONGODB_METRICS_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ include "mongodb.secretName" . }}
 | 
			
		||||
                  key: mongodb-metrics-password
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /tmp
 | 
			
		||||
              subPath: tmp-dir
 | 
			
		||||
            {{- if .Values.tls.enabled }}
 | 
			
		||||
            - name: certs
 | 
			
		||||
              mountPath: /certs
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.metrics.extraVolumeMounts }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.metrics.extraVolumeMounts "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          ports:
 | 
			
		||||
            - name: metrics
 | 
			
		||||
              containerPort: {{ .Values.metrics.containerPort }}
 | 
			
		||||
          {{- if not .Values.diagnosticMode.enabled }}
 | 
			
		||||
          {{- if .Values.metrics.customLivenessProbe }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.customLivenessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.livenessProbe.enabled }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.metrics.livenessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            tcpSocket:
 | 
			
		||||
              port: metrics
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.metrics.customReadinessProbe }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.customReadinessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.readinessProbe.enabled }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.metrics.readinessProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            httpGet:
 | 
			
		||||
              path: /
 | 
			
		||||
              port: metrics
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.metrics.customStartupProbe }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.customStartupProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if .Values.metrics.startupProbe.enabled }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.metrics.startupProbe "enabled") "context" $) | nindent 12 }}
 | 
			
		||||
            tcpSocket:
 | 
			
		||||
              port: metrics
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.metrics.resources }}
 | 
			
		||||
          resources: {{- include "common.tplvalues.render" (dict "value" .Values.metrics.resources "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else if ne .Values.metrics.resourcesPreset "none" }}
 | 
			
		||||
          resources: {{- include "common.resources.preset" (dict "type" .Values.metrics.resourcesPreset) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.sidecars }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.sidecars "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      volumes:
 | 
			
		||||
        - name: empty-dir
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
        - name: common-scripts
 | 
			
		||||
          configMap:
 | 
			
		||||
            name: {{ printf "%s-common-scripts" (include "mongodb.fullname" .) }}
 | 
			
		||||
            defaultMode: 0o550
 | 
			
		||||
        {{- if or .Values.initdbScriptsConfigMap .Values.initdbScripts }}
 | 
			
		||||
        - name: custom-init-scripts
 | 
			
		||||
          configMap:
 | 
			
		||||
            name: {{ template "mongodb.initdbScriptsCM" . }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if or .Values.configuration .Values.existingConfigmap }}
 | 
			
		||||
        - name: config
 | 
			
		||||
          configMap:
 | 
			
		||||
            name: {{ include "mongodb.configmapName" . }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.extraVolumes }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.extraVolumes "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.tls.enabled }}
 | 
			
		||||
        - name: certs
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
        {{- if (include "mongodb.autoGenerateCerts" .) }}
 | 
			
		||||
        - name: certs-volume
 | 
			
		||||
          secret:
 | 
			
		||||
            secretName: {{ template "mongodb.tlsSecretName" . }}
 | 
			
		||||
            items:
 | 
			
		||||
            - key: mongodb-ca-cert
 | 
			
		||||
              path: mongodb-ca-cert
 | 
			
		||||
              mode: 0o600
 | 
			
		||||
            - key: mongodb-ca-key
 | 
			
		||||
              path: mongodb-ca-key
 | 
			
		||||
              mode: 0o600
 | 
			
		||||
        {{- else }}
 | 
			
		||||
        - name: mongodb-certs-0
 | 
			
		||||
          secret:
 | 
			
		||||
            secretName: {{ include "common.tplvalues.render" ( dict "value" .Values.tls.standalone.existingSecret "context" $) }}
 | 
			
		||||
            defaultMode: 256
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
  {{- if not .Values.persistence.enabled }}
 | 
			
		||||
        - name: {{ .Values.persistence.name | default "datadir" }}
 | 
			
		||||
          {{- if .Values.persistence.medium }}
 | 
			
		||||
          emptyDir:
 | 
			
		||||
            medium: {{ .Values.persistence.medium | quote }}
 | 
			
		||||
          {{- else }}
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
  {{- else if .Values.persistence.existingClaim }}
 | 
			
		||||
        - name: {{ .Values.persistence.name | default "datadir" }}
 | 
			
		||||
          persistentVolumeClaim:
 | 
			
		||||
            claimName: {{ printf "%s" (tpl .Values.persistence.existingClaim .) }}
 | 
			
		||||
  {{- else if not .Values.useStatefulSet }}
 | 
			
		||||
        - name: {{ .Values.persistence.name | default "datadir" }}
 | 
			
		||||
          persistentVolumeClaim:
 | 
			
		||||
            claimName: {{ template "mongodb.fullname" . }}
 | 
			
		||||
  {{- else }}
 | 
			
		||||
  {{- if .Values.persistentVolumeClaimRetentionPolicy.enabled }}
 | 
			
		||||
  persistentVolumeClaimRetentionPolicy:
 | 
			
		||||
    whenDeleted: {{ .Values.persistentVolumeClaimRetentionPolicy.whenDeleted }}
 | 
			
		||||
    whenScaled: {{ .Values.persistentVolumeClaimRetentionPolicy.whenScaled }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  volumeClaimTemplates:
 | 
			
		||||
    - metadata:
 | 
			
		||||
        name: {{ .Values.persistence.name | default "datadir" }}
 | 
			
		||||
        {{- if .Values.persistence.annotations }}
 | 
			
		||||
        annotations: {{- include "common.tplvalues.render" (dict "value" .Values.persistence.annotations "context" $) | nindent 10 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{- if .Values.persistence.labels }}
 | 
			
		||||
        labels: {{- include "common.tplvalues.render" (dict "value" .Values.persistence.labels "context" $) | nindent 10 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      spec:
 | 
			
		||||
        accessModes:
 | 
			
		||||
        {{- range .Values.persistence.accessModes }}
 | 
			
		||||
          - {{ . | quote }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        resources:
 | 
			
		||||
          requests:
 | 
			
		||||
            storage: {{ .Values.persistence.size | quote }}
 | 
			
		||||
        {{- if .Values.persistence.volumeClaimTemplates.selector }}
 | 
			
		||||
        selector: {{- include "common.tplvalues.render" (dict "value" .Values.persistence.volumeClaimTemplates.selector "context" $) | nindent 10 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
        {{ include "common.storage.class" (dict "persistence" .Values.persistence "global" .Values.global) }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										28
									
								
								opencloud/charts/mongodb/templates/standalone/pdb.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								opencloud/charts/mongodb/templates/standalone/pdb.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and (not (eq .Values.architecture "replicaset")) .Values.pdb.create }}
 | 
			
		||||
apiVersion: {{ include "common.capabilities.policy.apiVersion" . }}
 | 
			
		||||
kind: PodDisruptionBudget
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if .Values.commonAnnotations }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  {{- if .Values.pdb.minAvailable }}
 | 
			
		||||
  minAvailable: {{ .Values.pdb.minAvailable }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if or .Values.pdb.maxUnavailable (not .Values.pdb.minAvailable) }}
 | 
			
		||||
  maxUnavailable: {{ .Values.pdb.maxUnavailable | default 1 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }}
 | 
			
		||||
      app.kubernetes.io/component: mongodb
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										31
									
								
								opencloud/charts/mongodb/templates/standalone/pvc.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								opencloud/charts/mongodb/templates/standalone/pvc.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) (not (eq .Values.architecture "replicaset")) (not .Values.useStatefulSet) }}
 | 
			
		||||
kind: PersistentVolumeClaim
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.fullname" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  annotations:
 | 
			
		||||
    {{- if .Values.persistence.resourcePolicy }}
 | 
			
		||||
    helm.sh/resource-policy: {{ .Values.persistence.resourcePolicy | quote }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
    {{- if or .Values.persistence.annotations .Values.commonAnnotations }}
 | 
			
		||||
    {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.persistence.annotations .Values.commonAnnotations ) "context" . ) }}
 | 
			
		||||
    {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  accessModes:
 | 
			
		||||
  {{- range .Values.persistence.accessModes }}
 | 
			
		||||
    - {{ . | quote }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  resources:
 | 
			
		||||
    requests:
 | 
			
		||||
      storage: {{ .Values.persistence.size | quote }}
 | 
			
		||||
  {{ include "common.storage.class" (dict "persistence" .Values.persistence "global" .Values.global) }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										62
									
								
								opencloud/charts/mongodb/templates/standalone/svc.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								opencloud/charts/mongodb/templates/standalone/svc.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if not (eq .Values.architecture "replicaset") }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ include "mongodb.service.nameOverride" . }}
 | 
			
		||||
  namespace: {{ include "mongodb.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
  {{- if or .Values.service.annotations .Values.commonAnnotations }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.service.annotations .Values.commonAnnotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
spec:
 | 
			
		||||
  type: {{ .Values.service.type }}
 | 
			
		||||
  {{- if and (eq .Values.service.type "ClusterIP") .Values.service.clusterIP }}
 | 
			
		||||
  clusterIP: {{ .Values.service.clusterIP }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if and (eq .Values.service.type "LoadBalancer") .Values.service.loadBalancerIP }}
 | 
			
		||||
  loadBalancerIP: {{ .Values.service.loadBalancerIP }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if and (eq .Values.service.type "LoadBalancer") .Values.service.loadBalancerClass }}
 | 
			
		||||
  loadBalancerClass: {{ .Values.service.loadBalancerClass }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if .Values.service.externalIPs }}
 | 
			
		||||
  externalIPs: {{ toYaml .Values.service.externalIPs | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if .Values.service.loadBalancerSourceRanges }}
 | 
			
		||||
  loadBalancerSourceRanges: {{- toYaml .Values.service.loadBalancerSourceRanges | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if (eq .Values.service.type "LoadBalancer") }}
 | 
			
		||||
  allocateLoadBalancerNodePorts: {{ .Values.service.allocateLoadBalancerNodePorts }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if .Values.service.sessionAffinity }}
 | 
			
		||||
  sessionAffinity: {{ .Values.service.sessionAffinity }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if .Values.service.sessionAffinityConfig }}
 | 
			
		||||
  sessionAffinityConfig: {{- include "common.tplvalues.render" (dict "value" .Values.service.sessionAffinityConfig "context" $) | nindent 4 }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if (or (eq .Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort")) }}
 | 
			
		||||
  externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy | quote }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  ports:
 | 
			
		||||
    - name: {{ .Values.service.portName | quote }}
 | 
			
		||||
      port: {{ .Values.service.ports.mongodb }}
 | 
			
		||||
      targetPort: mongodb
 | 
			
		||||
      {{- if and (or (eq .Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort")) .Values.service.nodePorts.mongodb }}
 | 
			
		||||
      nodePort: {{ .Values.service.nodePorts.mongodb }}
 | 
			
		||||
      {{- else if eq .Values.service.type "ClusterIP" }}
 | 
			
		||||
      nodePort: null
 | 
			
		||||
      {{- end }}
 | 
			
		||||
    {{- if .Values.service.extraPorts }}
 | 
			
		||||
    {{- include "common.tplvalues.render" (dict "value" .Values.service.extraPorts "context" $) | nindent 4 }}
 | 
			
		||||
    {{- end }}
 | 
			
		||||
  {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
  selector: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/component: mongodb
 | 
			
		||||
{{- end }}
 | 
			
		||||
							
								
								
									
										245
									
								
								opencloud/charts/mongodb/templates/update-password/job.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										245
									
								
								opencloud/charts/mongodb/templates/update-password/job.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,245 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if .Values.passwordUpdateJob.enabled }}
 | 
			
		||||
{{- $customUsers := include "mongodb.customUsers" . }}
 | 
			
		||||
{{- $customDatabases := include "mongodb.customDatabases" . }}
 | 
			
		||||
apiVersion: batch/v1
 | 
			
		||||
kind: Job
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-password-update" (include "common.names.fullname" .) | trunc 63 | trimSuffix "-" }}
 | 
			
		||||
  namespace: {{ include "common.names.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/part-of: mongodb
 | 
			
		||||
    app.kubernetes.io/component: update-job
 | 
			
		||||
  {{- $defaultAnnotations := dict "helm.sh/hook" "pre-upgrade" "helm.sh/hook-delete-policy" "hook-succeeded" }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.commonAnnotations $defaultAnnotations .Values.passwordUpdateJob.annotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }}
 | 
			
		||||
spec:
 | 
			
		||||
  backoffLimit: {{ .Values.passwordUpdateJob.backoffLimit }}
 | 
			
		||||
  template:
 | 
			
		||||
    metadata:
 | 
			
		||||
      {{- $podLabels := include "common.tplvalues.merge" ( dict "values" ( list .Values.passwordUpdateJob.podLabels .Values.commonLabels ) "context" . ) }}
 | 
			
		||||
      labels: {{- include "common.labels.standard" ( dict "customLabels" $podLabels "context" $ ) | nindent 8 }}
 | 
			
		||||
        app.kubernetes.io/part-of: mongodb
 | 
			
		||||
        app.kubernetes.io/component: update-job
 | 
			
		||||
      {{- if .Values.passwordUpdateJob.podAnnotations }}
 | 
			
		||||
      annotations: {{- include "common.tplvalues.render" (dict "value" .Values.passwordUpdateJob.podAnnotations "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
    spec:
 | 
			
		||||
      {{- include "mongodb.imagePullSecrets" . | nindent 6 }}
 | 
			
		||||
      restartPolicy: OnFailure
 | 
			
		||||
      {{- if .Values.passwordUpdateJob.podSecurityContext.enabled }}
 | 
			
		||||
      securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.passwordUpdateJob.podSecurityContext "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      automountServiceAccountToken: {{ .Values.passwordUpdateJob.automountServiceAccountToken }}
 | 
			
		||||
      {{- if .Values.passwordUpdateJob.hostAliases }}
 | 
			
		||||
      hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.passwordUpdateJob.hostAliases "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
      initContainers:
 | 
			
		||||
        {{- if .Values.passwordUpdateJob.initContainers }}
 | 
			
		||||
        {{- include "common.tplvalues.render" (dict "value" .Values.passwordUpdateJob.initContainers "context" $) | nindent 8 }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      containers:
 | 
			
		||||
        - name: update-credentials
 | 
			
		||||
          image: {{ template "mongodb.image" . }}
 | 
			
		||||
          imagePullPolicy: {{ .Values.image.pullPolicy }}
 | 
			
		||||
          {{- if .Values.passwordUpdateJob.command }}
 | 
			
		||||
          command: {{- include "common.tplvalues.render" (dict "value" .Values.passwordUpdateJob.command "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else }}
 | 
			
		||||
          command:
 | 
			
		||||
            - /bin/bash
 | 
			
		||||
            - -ec
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.passwordUpdateJob.args }}
 | 
			
		||||
          args: {{- include "common.tplvalues.render" (dict "value" .Values.passwordUpdateJob.args "context" $) | nindent 12 }}
 | 
			
		||||
          {{- else }}
 | 
			
		||||
          args:
 | 
			
		||||
            - |
 | 
			
		||||
              {{- if .Values.usePasswordFiles }}
 | 
			
		||||
              # We need to load all the secret env vars to the system
 | 
			
		||||
              for file in $(find /bitnami/mongodb/secrets -type f); do
 | 
			
		||||
                  env_var_name="$(basename $file)"
 | 
			
		||||
                  echo "Exporting $env_var_name"
 | 
			
		||||
                  export $env_var_name="$(< $file)"
 | 
			
		||||
              done
 | 
			
		||||
              {{- end }}
 | 
			
		||||
 | 
			
		||||
              . /opt/bitnami/scripts/mongodb-env.sh
 | 
			
		||||
              . /opt/bitnami/scripts/libmongodb.sh
 | 
			
		||||
              . /opt/bitnami/scripts/liblog.sh
 | 
			
		||||
 | 
			
		||||
              protocol=mongodb
 | 
			
		||||
              {{- if eq .Values.architecture "replicaset" }}
 | 
			
		||||
              replicaset={{- range $i, $_ := until (int .Values.replicaCount) }}{{- if ne $i 0 }},{{- end }}{{ include "common.names.fullname" $ }}-{{ $i }}.{{ include "mongodb.service.nameOverride" $ }}:{{ $.Values.containerPorts.mongodb }}{{- end }}
 | 
			
		||||
              {{- else }}
 | 
			
		||||
              replicaset={{ include "common.names.fullname" . }}:{{ .Values.service.ports.mongodb }}
 | 
			
		||||
              {{- end }}
 | 
			
		||||
 | 
			
		||||
              info "Starting password update job"
 | 
			
		||||
              if [[ -f /job-status/root-password-changed ]]; then
 | 
			
		||||
                  info "Root password already updated. Skipping"
 | 
			
		||||
              else
 | 
			
		||||
                  info "Updating root password"
 | 
			
		||||
                  mongosh "${protocol}://$MONGODB_ROOT_USER:$MONGODB_PREVIOUS_ROOT_PASSWORD@$replicaset/admin" --eval "db.changeUserPassword('$MONGODB_ROOT_USER', '$MONGODB_NEW_ROOT_PASSWORD')"
 | 
			
		||||
                  touch /job-status/root-password-changed
 | 
			
		||||
                  info "Root password successfully updated"
 | 
			
		||||
              fi
 | 
			
		||||
              {{- if and (not (empty $customUsers)) (not (empty $customDatabases)) }}
 | 
			
		||||
 | 
			
		||||
              databases_extra=()
 | 
			
		||||
              usernames_extra=()
 | 
			
		||||
              IFS="$(mongodb_field_separator "$MONGODB_EXTRA_DATABASES")" read -r -a databases_extra <<<"$MONGODB_EXTRA_DATABASES"
 | 
			
		||||
              IFS="$(mongodb_field_separator "$MONGODB_EXTRA_USERNAMES")" read -r -a usernames_extra <<<"$MONGODB_EXTRA_USERNAMES"
 | 
			
		||||
              new_passwords_extra=()
 | 
			
		||||
              IFS="$(mongodb_field_separator "$MONGODB_NEW_EXTRA_PASSWORDS")" read -r -a new_passwords_extra <<<"$MONGODB_NEW_EXTRA_PASSWORDS"
 | 
			
		||||
 | 
			
		||||
              for ((i = 0; i < ${#usernames_extra[@]}; i++)); do
 | 
			
		||||
                  if [[ -f /job-status/password-${usernames_extra[i]}-changed ]]; then
 | 
			
		||||
                      info "User ${usernames_extra[i]} password already updated. Skipping"
 | 
			
		||||
                  else
 | 
			
		||||
                      info "Updating user ${usernames_extra[i]} password"
 | 
			
		||||
                      mongosh "${protocol}://$MONGODB_ROOT_USER:$MONGODB_NEW_ROOT_PASSWORD@$replicaset/${databases_extra[i]}?authSource=admin" --eval "db.changeUserPassword('${usernames_extra[i]}', '${new_passwords_extra[i]}');"
 | 
			
		||||
                      touch /job-status/password-${usernames_extra[i]}-changed
 | 
			
		||||
                      info "User ${usernames_extra[i]} password successfully updated"
 | 
			
		||||
                  fi
 | 
			
		||||
              done
 | 
			
		||||
 | 
			
		||||
              {{- end }}
 | 
			
		||||
 | 
			
		||||
              {{- if .Values.metrics.username }}
 | 
			
		||||
              if [[ -f /job-status/metrics-password-changed ]]; then
 | 
			
		||||
                  info "Metrics password already updated. Skipping"
 | 
			
		||||
              else
 | 
			
		||||
                  info "Updating metrics password"
 | 
			
		||||
                  mongosh "${protocol}://$MONGODB_ROOT_USER:$MONGODB_NEW_ROOT_PASSWORD@$replicaset/admin" --eval "db.changeUserPassword('$MONGODB_METRICS_USER', '$MONGODB_NEW_METRICS_PASSWORD')"
 | 
			
		||||
                  touch /job-status/root-password-changed
 | 
			
		||||
                  info "Metrics password successfully updated"
 | 
			
		||||
              fi
 | 
			
		||||
              {{- end }}
 | 
			
		||||
 | 
			
		||||
              {{- if .Values.passwordUpdateJob.extraCommands }}
 | 
			
		||||
              info "Running extra commmands"
 | 
			
		||||
              {{- include "common.tplValues.render" (dict "value" .Values.passwordUpdateJob.extraCommands "context" $) | nindent 14 }}
 | 
			
		||||
              {{- end }}
 | 
			
		||||
              info "Password update job finished successfully"
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          env:
 | 
			
		||||
            - name: BITNAMI_DEBUG
 | 
			
		||||
              value: {{ ternary "true" "false" .Values.image.debug | quote }}
 | 
			
		||||
            {{- if not .Values.auth.usePasswordFiles }}
 | 
			
		||||
            - name: MONGODB_PREVIOUS_ROOT_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ template "mongodb.update-job.previousSecretName" . }}
 | 
			
		||||
                  key: mongodb-root-password
 | 
			
		||||
            - name: MONGODB_NEW_ROOT_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ template "mongodb.update-job.newSecretName" . }}
 | 
			
		||||
                  key: mongodb-root-password
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if and (not (empty $customUsers)) (not (empty $customDatabases)) }}
 | 
			
		||||
            - name: MONGODB_EXTRA_USERNAMES
 | 
			
		||||
              value: {{ $customUsers | quote }}
 | 
			
		||||
            - name: MONGODB_EXTRA_DATABASES
 | 
			
		||||
              value: {{ $customDatabases | quote }}
 | 
			
		||||
            {{- if not .Values.auth.usePasswordFiles }}
 | 
			
		||||
            - name: MONGODB_NEW_EXTRA_PASSWORDS
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ template "mongodb.update-job.newSecretName" . }}
 | 
			
		||||
                  key: mongodb-passwords
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.metrics.username }}
 | 
			
		||||
            - name: MONGODB_METRICS_USER
 | 
			
		||||
              value: {{ .Values.metrics.username | quote }}
 | 
			
		||||
            {{- if not .Values.auth.usePasswordFiles }}
 | 
			
		||||
            - name: MONGODB_PREVIOUS_METRICS_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ template "mongodb.update-job.previousSecretName" . }}
 | 
			
		||||
                  key: mongodb-metrics-password
 | 
			
		||||
            - name: MONGODB_NEW_METRICS_PASSWORD
 | 
			
		||||
              valueFrom:
 | 
			
		||||
                secretKeyRef:
 | 
			
		||||
                  name: {{ template "mongodb.update-job.newSecretName" . }}
 | 
			
		||||
                  key: mongodb-metrics-password
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.passwordUpdateJob.extraEnvVars }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.passwordUpdateJob.extraEnvVars "context" $) | nindent 12 }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- if or .Values.passwordUpdateJob.extraEnvVarsCM .Values.passwordUpdateJob.extraEnvVarsSecret }}
 | 
			
		||||
          envFrom:
 | 
			
		||||
            {{- if .Values.passwordUpdateJob.extraEnvVarsCM }}
 | 
			
		||||
            - configMapRef:
 | 
			
		||||
                name: {{ .Values.passwordUpdateJob.extraEnvVarsCM }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
            {{- if .Values.passwordUpdateJob.extraEnvVarsSecret }}
 | 
			
		||||
            - secretRef:
 | 
			
		||||
                name: {{ .Values.passwordUpdateJob.extraEnvVarsSecret }}
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.passwordUpdateJob.containerSecurityContext.enabled }}
 | 
			
		||||
          securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.passwordUpdateJob.containerSecurityContext "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.passwordUpdateJob.customLivenessProbe }}
 | 
			
		||||
          livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.passwordUpdateJob.customLivenessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.passwordUpdateJob.customReadinessProbe }}
 | 
			
		||||
          readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.passwordUpdateJob.customReadinessProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.passwordUpdateJob.customStartupProbe }}
 | 
			
		||||
          startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.passwordUpdateJob.customStartupProbe "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          volumeMounts:
 | 
			
		||||
            - name: empty-dir
 | 
			
		||||
              mountPath: /job-status
 | 
			
		||||
              subPath: job-dir
 | 
			
		||||
            {{- if .Values.usePasswordFiles }}
 | 
			
		||||
            - name: mongodb-previous-credentials
 | 
			
		||||
              mountPath: /bitnami/mongodb/secrets/previous
 | 
			
		||||
            - name: mongodb-new-credentials
 | 
			
		||||
              mountPath: /bitnami/mongodb/secrets/new
 | 
			
		||||
            {{- end }}
 | 
			
		||||
          {{- if .Values.passwordUpdateJob.extraVolumeMounts }}
 | 
			
		||||
            {{- include "common.tplvalues.render" (dict "value" .Values.passwordUpdateJob.extraVolumeMounts "context" $) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
          {{- if .Values.passwordUpdateJob.resources }}
 | 
			
		||||
          resources: {{- toYaml .Values.passwordUpdateJob.resources | nindent 12 }}
 | 
			
		||||
          {{- else if ne .Values.passwordUpdateJob.resourcesPreset "none" }}
 | 
			
		||||
          resources: {{- include "common.resources.preset" (dict "type" .Values.passwordUpdateJob.resourcesPreset) | nindent 12 }}
 | 
			
		||||
          {{- end }}
 | 
			
		||||
      volumes:
 | 
			
		||||
        - name: empty-dir
 | 
			
		||||
          emptyDir: {}
 | 
			
		||||
        {{- if and .Values.auth.usePasswordFiles }}
 | 
			
		||||
        - name: mongodb-previous-credentials
 | 
			
		||||
          secret:
 | 
			
		||||
            secretName: {{ template "mongodb.update-job.previousSecretName" . }}
 | 
			
		||||
            items:
 | 
			
		||||
              - key: mongodb-root-password
 | 
			
		||||
                path: MONGODB_PREVIOUS_ROOT_PASSWORD
 | 
			
		||||
        - name: mongodb-new-credentials
 | 
			
		||||
          secret:
 | 
			
		||||
            secretName: {{ template "mongodb.update-job.newSecretName" . }}
 | 
			
		||||
            items:
 | 
			
		||||
              - key: mongodb-root-password
 | 
			
		||||
                path: MONGODB_NEW_ROOT_PASSWORD
 | 
			
		||||
              {{- if and (not (empty $customUsers)) (not (empty $customDatabases)) }}
 | 
			
		||||
              - key: mongodb-passwords
 | 
			
		||||
                path: MONGODB_NEW_EXTRA_PASSWORDS
 | 
			
		||||
              {{- end }}
 | 
			
		||||
              {{- if .Values.metrics.username }}
 | 
			
		||||
              - key: mongodb-metrics-password
 | 
			
		||||
                path: MONGODB_NEW_METRICS_PASSWORD
 | 
			
		||||
              {{- end }}
 | 
			
		||||
        {{- end }}
 | 
			
		||||
      {{- if .Values.passwordUpdateJob.extraVolumes }}
 | 
			
		||||
      {{- include "common.tplvalues.render" (dict "value" .Values.passwordUpdateJob.extraVolumes "context" $) | nindent 8 }}
 | 
			
		||||
      {{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
@@ -0,0 +1,32 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and .Values.passwordUpdateJob.enabled (include "mongodb.createSecret" .) (not ( include "mongodb.createPreviousSecret" . )) (not .Values.passwordUpdateJob.previousPasswords.existingSecret) }}
 | 
			
		||||
{{- $rootPassword := .Values.auth.rootPassword }}
 | 
			
		||||
{{- $metricsPassword := .Values.metrics.password }}
 | 
			
		||||
{{- $customUsers := include "mongodb.customUsers" . }}
 | 
			
		||||
{{- $customPasswords := join "," (include "mongodb.customPasswords" .) }}
 | 
			
		||||
{{- $customDatabases := include "mongodb.customDatabases" . }}
 | 
			
		||||
{{- $replicationPassword := .Values.auth.replicationPassword }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Secret
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-new-secret" (include "common.names.fullname" .) | trunc 63 | trimSuffix "-" }}
 | 
			
		||||
  namespace: {{ include "common.names.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/part-of: mongodb
 | 
			
		||||
  {{- $defaultAnnotations := dict "helm.sh/hook" "pre-upgrade" "helm.sh/hook-delete-policy" "hook-succeeded" }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.commonAnnotations $defaultAnnotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }}
 | 
			
		||||
type: Opaque
 | 
			
		||||
data:
 | 
			
		||||
  mongodb-root-password: {{ required "The new root password is required!" $rootPassword | b64enc | quote }}
 | 
			
		||||
  {{- if and (not (empty $customUsers)) (not (empty $customDatabases)) }}
 | 
			
		||||
  mongodb-passwords: {{ required "The new custom passwords are required!" $customPasswords | b64enc | quote }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
  {{- if .Values.metrics.username }}
 | 
			
		||||
  mongodb-metrics-password: {{ required "The new metrics password is required!" $metricsPassword | b64enc | quote }}
 | 
			
		||||
  {{- end }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
@@ -0,0 +1,21 @@
 | 
			
		||||
{{- /*
 | 
			
		||||
Copyright Broadcom, Inc. All Rights Reserved.
 | 
			
		||||
SPDX-License-Identifier: APACHE-2.0
 | 
			
		||||
*/}}
 | 
			
		||||
 | 
			
		||||
{{- if and .Values.passwordUpdateJob.enabled (eq ( include "mongodb.createPreviousSecret" . ) "true") }}
 | 
			
		||||
{{- $rootPassword := .Values.passwordUpdateJob.previousPasswords.rootPassword }}
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Secret
 | 
			
		||||
metadata:
 | 
			
		||||
  name: {{ printf "%s-previous-secret" (include "common.names.fullname" .) | trunc 63 | trimSuffix "-" }}
 | 
			
		||||
  namespace: {{ include "common.names.namespace" . | quote }}
 | 
			
		||||
  labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }}
 | 
			
		||||
    app.kubernetes.io/part-of: mongodb
 | 
			
		||||
  {{- $defaultAnnotations := dict "helm.sh/hook" "pre-upgrade" "helm.sh/hook-delete-policy" "hook-succeeded" }}
 | 
			
		||||
  {{- $annotations := include "common.tplvalues.merge" ( dict "values" ( list .Values.commonAnnotations $defaultAnnotations ) "context" . ) }}
 | 
			
		||||
  annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }}
 | 
			
		||||
type: Opaque
 | 
			
		||||
data:
 | 
			
		||||
  mongodb-root-password: {{ required "The previous root password is required!" $rootPassword | b64enc | quote }}
 | 
			
		||||
{{- end }}
 | 
			
		||||
		Reference in New Issue
	
	Block a user