# 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:
      containers:
      - name: {{ include "common.name" . }}
        image: "{{ include "common.repository" . }}/{{ .Values.image }}"
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        env:
        - name: CONFIG_HOME
          value: /opt/app/search-data-service/config/
        - name: KEY_STORE_PASSWORD
          value: {{ .Values.config.keyStorePassword }}
        - name: KEY_MANAGER_PASSWORD
          value: {{ .Values.config.keyManagerPassword }}
        volumeMounts:
        - mountPath: /etc/localtime
          name: localtime
          readOnly: true
        - mountPath: /opt/app/search-data-service/config/filter-config.json
          subPath: filter-config.json
          name: {{ include "common.fullname" . }}-service-config
        - mountPath: /opt/app/search-data-service/config/elastic-search.properties
          subPath: elastic-search.properties
          name: {{ include "common.fullname" . }}-service-config
        - mountPath: /opt/app/search-data-service/config/analysis-config.json
          subPath: analysis-config.json
          name: {{ include "common.fullname" . }}-service-config
        - mountPath: /opt/app/search-data-service/config/es-payload-translation.json
          subPath: es-payload-translation.json
          name: {{ include "common.fullname" . }}-service-config
        - mountPath: /opt/app/search-data-service/config/dynamic-custom-template.json
          subPath: dynamic-custom-template.json
          name: {{ include "common.fullname" . }}-service-config
        - mountPath: /opt/app/search-data-service/config/auth/tomcat_keystore
          subPath: tomcat_keystore
          name: {{ include "common.fullname" . }}-service-auth-config
        - mountPath: /opt/app/search-data-service/config/auth/search_policy.json
          subPath: search_policy.json
          name: {{ include "common.fullname" . }}-search-policy-config
        - mountPath: /var/log/onap
          name: {{ include "common.fullname" . }}-service-logs
        - mountPath: /opt/app/search-data-service/bundleconfig/etc/logback.xml
          name: {{ include "common.fullname" . }}-service-log-conf
          subPath: logback.xml
        ports:
        - containerPort: {{ .Values.service.internalPort }}
        # 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:
{{ toYaml (pluck .Values.flavor .Values.resources| first) | 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" . }}-service-logs
        - mountPath: /usr/share/filebeat/data
          name: {{ include "common.fullname" . }}-service-filebeat

      volumes:
      - name: localtime
        hostPath:
          path: /etc/localtime
      - name: {{ include "common.fullname" . }}-service-config
        configMap:
          name: {{ include "common.fullname" . }}
      - name: {{ include "common.fullname" . }}-service-auth-config
        secret:
          secretName: {{ include "common.fullname" . }}-keystone
      - name: {{ include "common.fullname" . }}-search-policy-config
        secret:
          secretName: {{ include "common.fullname" . }}-policy
      - name: filebeat-conf
        configMap:
          name: aai-filebeat
      - name: {{ include "common.fullname" . }}-service-logs
        emptyDir: {}
      - name: {{ include "common.fullname" . }}-service-filebeat
        emptyDir: {}
      - name: {{ include "common.fullname" . }}-service-log-conf
        configMap:
         name: {{ include "common.fullname" . }}-service-log
      restartPolicy: {{ .Values.global.restartPolicy | default .Values.restartPolicy }}
      imagePullSecrets:
      - name: "{{ include "common.namespace" . }}-docker-registry-key"
