# 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: extensions/v1beta1
kind: Deployment
metadata:
  name: {{ include "common.fullname" . }}
  namespace: {{ include "common.namespace" . }}
  labels:
    app: {{ include "common.fullname" . }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ .Release.Name }}
spec:
  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: {{ .Release.Name }}
    spec:
      initContainers:
      - name: so-chown
        image: alpine:3.6
        volumeMounts:
        - name: logs
          mountPath: /app/logs
        imagePullPolicy: {{ index .Values.pullPolicy }}
        command: ["/bin/sh", "-c", "chown -Rf 1000:1000 /app/logs"]
      restartPolicy: Always
      containers:
      - name: {{ include "common.name" . }}
        image: {{ include "common.repository" . }}/{{ .Values.image }}
        resources:
          requests:
            memory: {{ index .Values.resources.requests.memory}}
            cpu: {{ index .Values.resources.requests.cpu}}
          limits:
            memory: {{ index .Values.resources.limits.memory}}
            cpu: {{ index .Values.resources.limits.cpu}}
        env:
        - name: DB_HOST
          valueFrom:
            secretKeyRef:
              name: {{ .Release.Name}}-so-db-secrets
              key: mariadb.readwrite.host
        - name: DB_PORT
          valueFrom:
            secretKeyRef:
              name: {{ .Release.Name}}-so-db-secrets
              key: mariadb.readwrite.port
        - name: DB_USERNAME
          valueFrom:
            secretKeyRef:
              name: {{ .Release.Name}}-so-db-secrets
              key: mariadb.readwrite.rolename
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: {{ .Release.Name}}-so-db-secrets
              key: mariadb.readwrite.password
        - name: DB_ADMIN_USERNAME
          valueFrom:
            secretKeyRef:
              name: {{ .Release.Name}}-so-db-secrets
              key: mariadb.admin.rolename
        - name: DB_ADMIN_PASSWORD
          valueFrom:
            secretKeyRef:
              name: {{ .Release.Name}}-so-db-secrets
              key: mariadb.admin.password
        - name: CADI_KEYSTORE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: {{ .Release.Name}}-so-ssl-pwd-secret
              key: cadi_keystore_password
        - name: CADI_TRUSTSTORE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: {{ .Release.Name}}-so-ssl-pwd-secret
              key: cadi_truststore_password
        - name: MSO_KEYSTORE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: {{ .Release.Name}}-so-ssl-client-secret
              key: keystore_password
        - name: MSO_TRUSTSTORE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: {{ .Release.Name}}-so-ssl-client-secret
              key: truststore_password
        envFrom:
        - configMapRef:
            name: {{ include "common.fullname" . }}-configmap
        imagePullPolicy:  {{ index .Values "global" "pullPolicy" }}
        volumeMounts:
        - name: logs
          mountPath: /app/logs
        - name: certs
          mountPath: /app/certs/
          readOnly: true
        - name: config
          mountPath: /app/config
          readOnly: true
        livenessProbe:
          httpGet:
            path: {{- index .Values.livenessProbe.path|indent 2}}
            port: {{ index .Values.containerPort }}
            scheme: {{- index .Values.livenessProbe.scheme| indent 2}}
          initialDelaySeconds: {{ index .Values.livenessProbe.initialDelaySeconds}}
          periodSeconds: {{ index .Values.livenessProbe.periodSeconds}}
          timeoutSeconds: {{ index .Values.livenessProbe.timeoutSeconds}}
          successThreshold: {{ index .Values.livenessProbe.successThreshold}}
          failureThreshold: {{ index .Values.livenessProbe.failureThreshold}}
        ports:
        - containerPort: {{ index .Values.containerPort }}
          name: {{ .Values.service.portName }}
          protocol: TCP
      volumes:
      - name: logs
        emptyDir: {}
      - name: certs
        secret:
            secretName: {{ .Release.Name}}-so-ssl-secret
      - name: config
        configMap:
            name: {{ include "common.fullname" . }}-app-configmap
      imagePullSecrets:
        - name: "{{ include "common.namespace" . }}-docker-registry-key"