# 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: {{ include "common.release" . }}
    heritage: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    metadata:
      labels:
        app: {{ include "common.name" . }}
        release: {{ include "common.release" . }}
    spec:
      initContainers:
      - command:
        - /root/ready.py
        args:
        - --container-name
        - {{ include "common.release" . }}-galera-config
        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:
        - command:
          - /bin/bash
          - ./do-start.sh
          - pap
          name: {{ include "common.name" . }}
          image: "{{ include "common.repository" . }}/{{ .Values.image }}"
          imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
          resources:
{{ include "common.resources" . | indent 12 }}
          ports:
          - containerPort: {{ .Values.service.externalPort }}
          - containerPort: {{ .Values.service.externalPort2 }}
          {{- if eq .Values.liveness.enabled true }}
          livenessProbe:
            tcpSocket:
              port: {{ .Values.service.externalPort }}
            initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
            periodSeconds: {{ .Values.liveness.periodSeconds }}
          {{ end -}}
          readinessProbe:
            tcpSocket:
              port: {{ .Values.service.externalPort }}
            initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
            periodSeconds: {{ .Values.readiness.periodSeconds }}
          env:
          - name: PRELOAD_POLICIES
            value: "{{ .Values.config.preloadPolicies }}"
          volumeMounts:
          - mountPath: /etc/localtime
            name: localtime
            readOnly: true
          - mountPath: /tmp/policy-install/config/push-policies.sh
            name: pe-pap
            subPath: push-policies.sh
          - mountPath: /tmp/policy-install/config/pap-tweaks.sh
            name: pe-pap
            subPath: pap-tweaks.sh
          - mountPath: /tmp/policy-install/config/paplp.conf
            name: pe-pap
            subPath: paplp.conf
          - mountPath: /tmp/policy-install/config/pap.conf
            name: pe-pap
            subPath: pap.conf
          - mountPath: /tmp/policy-install/config/mysql.conf
            name: pe-pap
            subPath: mysql.conf
          - mountPath: /tmp/policy-install/config/elk.conf
            name: pe-pap
            subPath: elk.conf
          - mountPath: /tmp/policy-install/config/console.conf
            name: pe-pap
            subPath: console.conf
          - mountPath: /tmp/policy-install/config/base.conf
            name: pe
            subPath: base.conf
          - mountPath: /tmp/policy-install/do-start.sh
            name: pe-scripts
            subPath: do-start.sh
          - mountPath: /var/log/onap
            name: policy-logs
          - mountPath: /tmp/policy-install/logback.xml
            name: policy-sdk-logback
            subPath: logback.xml
          - mountPath: /tmp/logback.xml
            name: policy-logback
            subPath: logback.xml
          lifecycle:
            postStart:
              exec:
                command: ["/bin/sh", "-c", "export LOG=wait_logback.log; touch $LOG; export SRC=/tmp/logback.xml; export DST=/opt/app/policy/servers/pap/webapps/pap/WEB-INF/classes/; while [ ! -e $DST ]; do echo 'Waiting for $DST...' >> $LOG; sleep 5; done; sleep 2; /bin/cp -f $SRC $DST; export SRC=/tmp/policy-install/logback.xml; export DST=/opt/app/policy/servers/console/webapps/onap/WEB-INF/classes/; while [ ! -e $DST ]; do echo 'Waiting for $DST...' >> $LOG; sleep 5; done; sleep 2; /bin/cp -f $SRC $DST; echo 'Done' >> $LOG"]
        - image: "{{ .Values.global.loggingRepository | default .Values.loggingRepository }}/{{ .Values.global.loggingImage | default .Values.loggingImage }}"
          imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
          name: filebeat-onap
          volumeMounts:
          - mountPath: /usr/share/filebeat/filebeat.yml
            name: filebeat-conf
            subPath: filebeat.yml
          - mountPath: /var/log/onap
            name: policy-logs
          - mountPath: /usr/share/filebeat/data
            name: policy-data-filebeat
      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
        - name: filebeat-conf
          configMap:
            name: {{ include "common.release" . }}-filebeat-configmap
        - name: policy-logs
          emptyDir: {}
        - name: policy-data-filebeat
          emptyDir: {}
        - name: policy-logback
          configMap:
            name: {{ include "common.fullname" . }}-log-configmap
        - name: policy-sdk-logback
          configMap:
            name: {{ include "common.fullname" . }}-sdk-log-configmap
        - name: pe
          configMap:
            name: {{ include "common.release" . }}-pe-configmap
            defaultMode: 0755
        - name: pe-scripts
          configMap:
            name: {{ include "common.release" . }}-pe-scripts-configmap
            defaultMode: 0777
        - name: pe-pap
          configMap:
            name: {{ include "common.fullname" . }}-pe-configmap
            defaultMode: 0755
      imagePullSecrets:
      - name: "{{ include "common.namespace" . }}-docker-registry-key"
