{{/*
# Copyright © 2018 AT&T USA
#
# 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.
*/}}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "common.fullname" . }}
  namespace: {{ include "common.namespace" . }}
  labels:
    app: {{ include "common.fullname" . }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ include "common.release" . }}
spec:
  selector:
    matchLabels:
      app: {{ include "common.name" . }}
  replicas: {{ index .Values.replicaCount }}
  minReadySeconds: {{ index .Values.minReadySeconds }}
  strategy:
    type: {{ index .Values.updateStrategy.type }}
    rollingUpdate:
      maxUnavailable: {{ index .Values.updateStrategy.maxUnavailable }}
      maxSurge: {{ index .Values.updateStrategy.maxSurge }}
  template:
    metadata:
      labels:
        app: {{ include "common.name" . }}
        release: {{ include "common.release" . }}
    spec:
      initContainers:
      {{ include "so.certificate.container_importer" . | indent 6 | trim }}
      {{ include "common.readinessCheck.waitFor" . | indent 6 | trim }}
      containers:
      - name: {{ include "common.name" . }}
        image: {{ include "repositoryGenerator.repository" . }}/{{ .Values.image }}
        resources: {{ include "common.resources" . | nindent 12 }}
        {{- if .Values.global.aafEnabled }}
        command:
        - sh
        args:
        - -c
        - |
          export $(cat {{ .Values.soHelpers.certInitializer.credsPath }}/mycreds.prop | xargs -0)
          {{- if .Values.global.security.aaf.enabled }}
          export KEYSTORE_PASSWORD="${cadi_keystore_password_p12}"
          {{- end }}
          /app/start-app.sh
        {{- end }}
        env:
        - name: DB_HOST
          value: {{ include "common.mariadbService" . }}
        - name: DB_PORT
          value: {{ include "common.mariadbPort" . | quote }}
        - name: DB_USERNAME
          {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" "db-user-creds" "key" "login") | indent 10 }}
        - name: DB_PASSWORD
          {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" "db-user-creds" "key" "password") | indent 10 }}
        - name: DB_ADMIN_USERNAME
          {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" "db-admin-creds" "key" "login") | indent 10 }}
        - name: DB_ADMIN_PASSWORD
          {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" "db-admin-creds" "key" "password") | indent 10 }}
        {{ include "so.certificates.env" . | indent 8 | trim }}
        envFrom:
        - configMapRef:
            name: {{ include "common.fullname" . }}-configmap
        imagePullPolicy:  {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        volumeMounts: {{ include "so.certificate.volumeMount" . | nindent 8 }}
        - name: logs
          mountPath: /app/logs
        - name: config
          mountPath: /app/config
          readOnly: true
        - name: {{ include "common.fullname" . }}-logs
          mountPath: {{ .Values.log.path }}
{{ include "so.helpers.livenessProbe" .| indent 8 }}
        ports:
        - containerPort: {{ index .Values.containerPort }}
          name: {{ .Values.service.portName }}
          protocol: TCP
      # Filebeat sidecar container
      {{ include "common.log.sidecar" . | nindent 6 }}
      serviceAccountName: {{ include "common.fullname" (dict "suffix" "read" "dot" . )}}
      volumes: {{ include "so.certificate.volumes" . | nindent 6 }}
      - name: logs
        emptyDir: {}
      - name: config
        configMap:
            name: {{ include "common.fullname" . }}-app-configmap
      - name: {{ include "common.fullname" . }}-log-conf
        configMap:
          name: {{ include "common.fullname" . }}-log
      {{ include "common.log.volumes" . | nindent 6 }}
      - name:  {{ include "common.fullname" . }}-logs
        emptyDir: {}
      imagePullSecrets:
        - name: "{{ include "common.namespace" . }}-docker-registry-key"
