{{/*
# Copyright © 2017-2020 AT&T, Amdocs, Bell Canada
#
# 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: {{- include "common.resourceMetadata" . | nindent 2 }}
spec:
  selector: {{- include "common.selectors" . | nindent 4 }}
  replicas: {{ .Values.replicaCount }}
  template:
    metadata: {{- include "common.templateMetadata" . | nindent 6 }}
    spec:
      imagePullSecrets:
      - name: "{{ include "common.namespace" . }}-docker-registry-key"
      initContainers:
        - name: {{ include "common.name" . }}-cassandra-readiness
          image: {{ include "repositoryGenerator.image.readiness" . }}
          imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
          command:
          - /app/ready.py
          args:
          - -j
          - "{{ include "common.release" . }}-music-cassandra-config"
          env:
          - name: NAMESPACE
            valueFrom:
              fieldRef:
                apiVersion: v1
                fieldPath: metadata.namespace
        {{ include "common.certInitializer.initContainer" . | indent 8 | trim }}
        - command:
          - sh
          args:
          - -c
          - "export KEYSTORE_PASSWORD=$(cat /opt/app/aafcertman/local/.pass); cd /config-input && for PFILE in `ls -1 .`; do envsubst <${PFILE} >/config/${PFILE}; done"
          env:
          - name: CASSA_USER
            {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" "cassa-secret" "key" "login") | indent 12 }}
          - name: CASSA_PASSWORD
            {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" "cassa-secret" "key" "password") | indent 12 }}
          volumeMounts: {{ include "common.certInitializer.volumeMount" . | nindent 10 }}
          - mountPath: /config-input
            name: properties-music-scrubbed
          - mountPath: /config
            name: properties-music
          image: {{ include "repositoryGenerator.image.envsubst" . }}
          imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
          name: {{ include "common.name" . }}-update-config
      containers:
        # MUSIC Container
        - name: "{{ include "common.name" . }}-springboot"
          image: {{ include "repositoryGenerator.repository" . }}/{{ .Values.image }}
          imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
          ports: {{ include "common.containerPorts" . | nindent 12  }}
          # disable liveness probe when breakpoints set in debugger
          # so K8s doesn't restart unresponsive container
          {{ if eq .Values.liveness.enabled true }}
          livenessProbe:
            tcpSocket:
              port: {{ .Values.liveness.port }}
            initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
            periodSeconds: {{ .Values.liveness.periodSeconds }}
          {{ end -}}
          readinessProbe:
            tcpSocket:
              port: {{ .Values.readiness.port }}
            initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
            periodSeconds: {{ .Values.readiness.periodSeconds }}
          resources: {{ include "common.resources" . | nindent 12 }}
          env:
          - name: SPRING_OPTS
            value: "{{ .Values.springOpts }}"
          - name: JAVA_OPTS
            value: "{{ .Values.javaOpts }}"
          - name: DEBUG
            value: "{{ .Values.debug }}"
          volumeMounts: {{ include "common.certInitializer.volumeMount" . | nindent 10 }}
          - name: localtime
            mountPath: /etc/localtime
            readOnly: true
          - name: properties-music
            mountPath: /opt/app/music/etc/music.properties
            subPath: music.properties
          - name: properties-music
            mountPath: /opt/app/music/etc/music-sb.properties
            subPath: music-sb.properties
          - name: properties-music-scrubbed
            mountPath: /opt/app/music/etc/logback.xml
            subPath: logback.xml
      volumes: {{ include "common.certInitializer.volumes" . | nindent 8 }}
        - name: shared-data
          emptyDir: {}
        - name: certificate-vol
          emptyDir: {}
        - name: localtime
          hostPath:
            path: /etc/localtime
        - name: properties-music-scrubbed
          configMap:
            name: {{ include "common.fullname" . }}
        - name: properties-music
          emptyDir:
            medium: Memory
