{{/*
# Copyright © 2019 Orange
# Copyright © 2020 Samsung Electronics
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
*/}}

{{ include "mariadbInit._updateSecrets" . -}}

apiVersion: batch/v1
kind: Job
metadata:
  name: {{ include "common.fullname" . }}-config-job
  namespace: {{ include "common.namespace" . }}
  labels:
    app: {{ include "common.name" . }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ include "common.release" . }}
    heritage: {{ .Release.Service }}
spec:
  backoffLimit: 20
  template:
    metadata:
      labels:
        app: {{ include "common.name" . }}
        release: {{ include "common.release" . }}
      name: {{ include "common.name" . }}
    spec:
      initContainers:
      {{- if .Values.global.mariadbGalera.localCluster }}
      {{-   if .Values.global.mariadbGalera.useOperator }}
      {{ include "common.readinessCheck.waitFor" (dict "dot" . "wait_for" .Values.readinessCheck.wait_for_local_operator ) | indent 6 | trim }}
      {{    else }}
      {{ include "common.readinessCheck.waitFor" (dict "dot" . "wait_for" .Values.readinessCheck.wait_for_local ) | indent 6 | trim }}
      {{-   end }}
      {{ else }}
      {{-   if .Values.global.mariadbGalera.useOperator }}
      {{ include "common.readinessCheck.waitFor" (dict "dot" . "wait_for" .Values.readinessCheck.wait_for_global_operator ) | indent 6 | trim }}
      {{   else }}
      {{ include "common.readinessCheck.waitFor" (dict "dot" . "wait_for" .Values.readinessCheck.wait_for_global ) | indent 6 | trim }}
      {{-   end }}
      {{- end }}
      containers:
      - name: {{ include "common.name" . }}
        image: {{ include "repositoryGenerator.image.mariadb" . }}
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        command:
          - /bin/sh
          - -c
          - |
            {{- if include "common.onServiceMesh" . }}
            echo "waiting 15s for istio side cars to be up"; sleep 15s;{{- end }}
            /db_init/db_init.sh {{ if or .Values.dbScriptConfigMap .Values.dbScript }} &&
            /db_config/db_cmd.sh{{ end }}
        env:
        - name: DB_HOST
          value: {{ include "common.mariadbService" . }}
        - name: DB_PORT
          value: {{ include "common.mariadbPort" . | quote }}
        - name: MYSQL_ROOT_PASSWORD
          {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" "root-password" "key" (default "password" .Values.global.mariadbGalera.userRootSecretKey)) | indent 10 }}
        - name: {{ printf "MYSQL_USER_%s" .Values.config.mysqlDatabase | upper }}
          {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" .Values.config.mysqlDatabase "key" "login") | indent 10 }}
        - name: {{ printf "MYSQL_PASSWORD_%s" .Values.config.mysqlDatabase | upper }}
          {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" .Values.config.mysqlDatabase "key" "password") | indent 10 }}
{{- $root := . }}
{{ range $db, $_values := .Values.config.mysqlAdditionalDatabases }}
        - name: {{ printf "MYSQL_USER_%s" $db | upper }}
          {{- include "common.secret.envFromSecretFast" (dict "global" $root "uid" $db "key" "login") | indent 10 }}
        - name: {{ printf "MYSQL_PASSWORD_%s" $db | upper }}
          {{- include "common.secret.envFromSecretFast" (dict "global" $root "uid" $db "key" "password") | indent 10 }}
{{ end }}
        volumeMounts:
        - mountPath: /etc/localtime
          name: localtime
          readOnly: true
        - name: mariadb-init
          mountPath: /db_init/
{{- if or .Values.dbScriptConfigMap .Values.dbScript }}
        - name: mariadb-conf
          mountPath: /db_config/
{{- end }}
        resources: {{ include "common.resources" . | nindent 10 }}
      {{ include "common.waitForJobContainer" . | indent 6 | trim }}
      {{- if .Values.nodeSelector }}
      nodeSelector:
{{ toYaml .Values.nodeSelector | indent 10 }}
      {{- end -}}
      {{- if .Values.affinity }}
      affinity:
{{ toYaml .Values.affinity | indent 10 }}
      {{- end }}
      serviceAccountName: {{ include "common.fullname" (dict "suffix" "read" "dot" . )}}
      volumes:
      - name: localtime
        hostPath:
          path: /etc/localtime
{{- if  or .Values.dbScriptConfigMap .Values.dbScript }}
      - name: mariadb-conf
        configMap:
{{-   if  .Values.dbScriptConfigMap }}
          name: {{ tpl .Values.dbScriptConfigMap . }}
{{-   else -}}
          name: {{ include "common.fullname" . }}-dbscript
{{-   end }}
          defaultMode: 0755
{{- end }}
      - name: mariadb-init
        configMap:
          name: {{ include "mariadbInit.configMap" . }}
          defaultMode: 0755
      restartPolicy: Never
      imagePullSecrets:
      - name: "{{ include "common.namespace" . }}-docker-registry-key"
