# Copyright © 2017 Amdocs, Bell Canada
# Modifications Copyright © 2018 AT&T
#
# 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 }}
  selector:
    matchLabels:
      app: {{ include "common.name" . }}
  template:
    metadata:
      labels:
        app: {{ include "common.name" . }}
        release: {{ .Release.Name }}
      name: {{ include "common.name" . }}
    spec:
      initContainers:
      - command:
        - /root/ready.py
        args:
        - --container-name
        - aai-elasticsearch
        - --container-name
        - aai-search-data
        - --container-name
        - aai
        env:
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        image: "{{ .Values.global.readinessRepository }}/{{ .Values.global.readinessImage }}"
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        name: {{ include "common.name" . }}-readiness
      containers:
      - name: {{ include "common.name" . }}
        image: "{{ include "common.repository" . }}/{{ .Values.image }}"
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}

        volumeMounts:
        - mountPath: /etc/localtime
          name: localtime
          readOnly: true
        - mountPath: /opt/app/sparky/config/auth/
          name: {{ include "common.fullname" . }}-auth-config

        - mountPath: /opt/app/sparky/config/portal/
          name: {{ include "common.fullname" . }}-portal-config

        - mountPath: /opt/app/sparky/config/portal/BOOT-INF/classes/
          name: {{ include "common.fullname" . }}-portal-config-props

        - mountPath: /var/log/onap
          name: {{ include "common.fullname" . }}-logs

        - mountPath:  /opt/app/sparky/config/application.properties
          name: {{ include "common.fullname" . }}-properties
          subPath: application.properties

        - mountPath:  /opt/app/sparky/config/application-resources.properties
          name: {{ include "common.fullname" . }}-properties
          subPath: application-resources.properties

        - mountPath:  /opt/app/sparky/config/application-ssl.properties
          name: {{ include "common.fullname" . }}-properties
          subPath: application-ssl.properties

        - mountPath:  /opt/app/sparky/config/application-oxm-default.properties
          name: {{ include "common.fullname" . }}-properties
          subPath: application-oxm-default.properties
          
        - mountPath:  /opt/app/sparky/config/application-oxm-override.properties
          name: {{ include "common.fullname" . }}-properties
          subPath: application-oxm-override.properties

        - mountPath:  /opt/app/sparky/config/application-oxm-schema-prod.properties
          name: {{ include "common.fullname" . }}-properties
          subPath: application-oxm-schema-prod.properties
        
        ports:
        - containerPort: {{ .Values.service.internalPort }}
        - containerPort: {{ .Values.service.internalPort2 }}
        # 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.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 }}
        resources:
{{ include "common.resources" . | indent 12 }}
      {{- if .Values.nodeSelector }}
      nodeSelector:
{{ toYaml .Values.nodeSelector | indent 8 }}
      {{- end -}}
      {{- if .Values.affinity }}
      affinity:
{{ toYaml .Values.affinity | indent 8 }}
      {{- 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-sparky-filebeat

      volumes:
      - name: localtime
        hostPath:
          path: /etc/localtime

      - name: {{ include "common.fullname" . }}-properties
        configMap:
          name: {{ include "common.fullname" . }}-prop

      - name: {{ include "common.fullname" . }}-config
        configMap:
          name: {{ include "common.fullname" . }}

      - name: {{ include "common.fullname" . }}-portal-config
        configMap:
          name: {{ include "common.fullname" . }}-portal

      - name: {{ include "common.fullname" . }}-portal-config-props
        configMap:
          name: {{ include "common.fullname" . }}-portal-props

      - name: {{ include "common.fullname" . }}-auth-config
        secret:
          secretName: {{ include "common.fullname" . }}
      - name: filebeat-conf
        configMap:
          name: aai-filebeat
      - name: {{ include "common.fullname" . }}-logs
        emptyDir: {}
      - name: aai-sparky-filebeat
        emptyDir: {}
      - name: modeldir
        emptyDir: {}
      restartPolicy: {{ .Values.global.restartPolicy | default .Values.restartPolicy }}
      imagePullSecrets:
      - name: "{{ include "common.namespace" . }}-docker-registry-key"
