# 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: apps/v1
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:
  selector:
    matchLabels:
      app: {{ include "common.name" . }}
  replicas: {{ .Values.replicaCount }}
  template:
    metadata:
      labels:
        app: {{ include "common.name" . }}
        release: {{ include "common.release" . }}
    spec:
      initContainers:
      - command:
        - sh
        args:
        - -c
        - "cd /config-input && for PFILE in `ls -1 *.conf`; do envsubst <${PFILE} >/config/${PFILE}; done"
        env:
        - name: JDBC_USER
          {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" "db-secret" "key" "login") | indent 10 }}
        - name: JDBC_PASSWORD
          {{- include "common.secret.envFromSecretFast" (dict "global" . "uid" "db-secret" "key" "password") | indent 10 }}
        volumeMounts:
        - mountPath: /config-input
          name: pe
        - mountPath: /config
          name: pe-processed
        image: "{{ .Values.global.envsubstImage }}"
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        name: {{ include "common.name" . }}-update-config
      - 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/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-processed
            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
        - name: pe-processed
          emptyDir:
            medium: Memory
      imagePullSecrets:
      - name: "{{ include "common.namespace" . }}-docker-registry-key"
