Pushing mongod and mongoexpress integration
This commit is contained in:
		@@ -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 }}
 | 
			
		||||
		Reference in New Issue
	
	Block a user