{{/*
# 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:
      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" . | indent 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
