# 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:
        - /bin/sh
        - -c
        - |
          mkdir -p /logroot/data-router/logs
          chmod -R 777 /logroot/data-router/logs
          chown -R root:root /logroot
        env:
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        securityContext:
          privileged: true
        image: {{ .Values.global.dockerhubRepository | default .Values.dockerhubRepository }}/{{ .Values.global.busyboxImage | default .Values.busyboxImage }}
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        name: init-sysctl
        volumeMounts:
        - name: {{ include "common.fullname" . }}-logs
          mountPath: /logroot/
      containers:
      - name: {{ include "common.name" . }}
        image: "{{ include "common.repository" . }}/{{ .Values.image }}"
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        env:
        - name: SERVICE_BEANS
          value: /opt/app/data-router/dynamic/conf
        - name: CONFIG_HOME
          value: /opt/app/data-router/config/
        - name: KEY_STORE_PASSWORD
          value: {{ .Values.config.keyStorePassword }}
        - name: DYNAMIC_ROUTES
          value: /opt/app/data-router/dynamic/routes
        - name: KEY_MANAGER_PASSWORD
          value: {{ .Values.config.keyManagerPassword }}
        - name: PATH
          value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
        - name: JAVA_HOME
          value: usr/lib/jvm/java-8-openjdk-amd64
        volumeMounts:
        - mountPath: /etc/localtime
          name: localtime
          readOnly: true
        - mountPath:  /opt/app/data-router/config/auth
          name: {{ include "common.fullname" . }}-auth
        - mountPath:  /opt/app/data-router/config/data-router.properties
          subPath: data-router.properties
          name: {{ include "common.fullname" . }}-properties
        - mountPath:  /opt/app/data-router/config/schemaIngest.properties
          subPath: schemaIngest.properties
          name: {{ include "common.fullname" . }}-properties
        - mountPath: /opt/app/data-router/dynamic/routes/entity-event.route
          subPath: entity-event.route
          name: {{ include "common.fullname" . }}-dynamic-route
        - mountPath: /opt/app/data-router/dynamic/conf/entity-event-policy.xml
          subPath: entity-event-policy.xml
          name: {{ include "common.fullname" . }}-dynamic-policy
        - mountPath: /logs/
          name: {{ include "common.fullname" . }}-logs
        ports:
        - containerPort: {{ .Values.service.internalPort }}
        {{- 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 }}
      volumes:
      - name: localtime
        hostPath:
          path: /etc/localtime
      - name: {{ include "common.fullname" . }}-auth
        secret:
          secretName: {{ include "common.fullname" . }}
      - name: {{ include "common.fullname" . }}-properties
        configMap:
          name: {{ include "common.fullname" . }}-prop
          items:
          - key: data-router.properties
            path: data-router.properties
          - key: schemaIngest.properties
            path: schemaIngest.properties
      - name: {{ include "common.fullname" . }}-dynamic-route
        configMap:
          name: {{ include "common.fullname" . }}-dynamic
      - name: {{ include "common.fullname" . }}-dynamic-policy
        configMap:
          name: {{ include "common.fullname" . }}-dynamic
      - name: {{ include "common.fullname" . }}-logs
        hostPath:
          path: {{ .Values.persistence.mountPath }}/{{ .Release.Name }}/{{ .Values.persistence.mountSubPath }}
      restartPolicy: {{ .Values.global.restartPolicy | default .Values.restartPolicy }}
      imagePullSecrets:
      - name: "{{ include "common.namespace" . }}-docker-registry-key"
