# Copyright © 2018 Amdocs, AT&T
# Modifications Copyright © 2018 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: extensions/v1beta1
kind: Deployment
metadata:
  name: {{ include "common.fullname" . }}
  namespace: {{ include "common.namespace" . }}
  labels:
    app: {{ include "common.name" . }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    metadata:
      labels:
        app: {{ include "common.name" . }}
        release: {{ .Release.Name }}
    spec:
      containers:
        - name: {{ include "common.name" . }}
          image: "{{ include "common.repository" . }}/{{ .Values.image }}"
          imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
          ports:
          - containerPort: {{ .Values.service.internalPort }}
          # disable liveness probe when breakpoints set in debugger
          # so K8s doesn't restart unresponsive container
          {{ if .Values.liveness.enabled }}
          livenessProbe:
            tcpSocket:
              port: {{ .Values.service.internalPort }}
            initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
            periodSeconds: {{ .Values.liveness.periodSeconds }}
          {{ end }}
          readinessProbe:
            tcpSocket:
              port: {{ .Values.service.internalPort }}
            initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
            periodSeconds: {{ .Values.readiness.periodSeconds }}
          env:
            - name: CONFIG_HOME
              value: "/opt/app/champ-service/appconfig"
            - name: GRAPHIMPL
              value: "janus-deps"
            - name: KEY_STORE_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: {{ template "common.fullname" . }}-pass
                  key: KEY_STORE_PASSWORD
            - name: KEY_MANAGER_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: {{ template "common.fullname" . }}-pass
                  key: KEY_MANAGER_PASSWORD
            - name: SERVICE_BEANS
              value: "/opt/app/champ-service/dynamic/conf"
          volumeMounts:
          - mountPath: /etc/localtime
            name: localtime
            readOnly: true
          - mountPath: /opt/app/champ-service/appconfig/champ-api.properties
            name: {{ include "common.fullname" . }}-config
            subPath: champ-api.properties
          - mountPath: /opt/app/champ-service/appconfig/auth
            name: {{ include "common.fullname" . }}-secrets
          - mountPath: /opt/app/champ-service/dynamic/conf/champ-beans.xml
            name: {{ include "common.fullname" . }}-dynamic-config
            subPath: champ-beans.xml
          - mountPath: /opt/app/champ-service/bundleconfig/etc/logback.xml
            name: {{ include "common.fullname" . }}-logback-config
            subPath: logback.xml
          - mountPath: /var/log/onap
            name: {{ include "common.fullname" . }}-logs
          resources:
{{ toYaml (pluck .Values.flavor .Values.resources| first) | indent 12 }}
        {{- if .Values.nodeSelector }}
        nodeSelector:
{{ toYaml .Values.nodeSelector | indent 10 }}
        {{- end -}}
        {{- if .Values.affinity }}
        affinity:
{{ toYaml .Values.affinity | indent 10 }}
        {{- end }}

        # side car containers
        - name: filebeat-onap
          image: "{{ .Values.global.loggingRepository }}/{{ .Values.global.loggingImage }}"
          imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
          volumeMounts:
          - mountPath: /usr/share/filebeat/filebeat.yml
            subPath: filebeat.yml
            name: filebeat-conf
          - mountPath: /var/log/onap
            name: {{ include "common.fullname" . }}-logs
          - mountPath: /usr/share/filebeat/data
            name: aai-filebeat

      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
        - name: {{ include "common.fullname" . }}-config
          configMap:
            name: {{ include "common.fullname" . }}
            items:
            - key: champ-api.properties
              path: champ-api.properties
        - name: {{ include "common.fullname" . }}-secrets
          secret:
            secretName: {{ include "common.fullname" . }}-champ
        - name: {{ include "common.fullname" . }}-dynamic-config
          configMap:
            name: {{ include "common.fullname" . }}-dynamic
            items:
            - key: champ-beans.xml
              path: champ-beans.xml
        - name: {{ include "common.fullname" . }}-logs
          emptyDir: {}
        - name: {{ include "common.fullname" . }}-logback-config
          configMap:
            name: {{ include "common.fullname" . }}-log-configmap
            items:
            - key: logback.xml
              path: logback.xml
        - name: filebeat-conf
          configMap:
            name: aai-filebeat
        - name: aai-filebeat
          emptyDir: {}
      imagePullSecrets:
      - name: "{{ include "common.namespace" . }}-docker-registry-key"
