{{/*
# Copyright (c) 2018 Amdocs, Bell Canada, AT&T
# Modifications Copyright (c) 2020 Nokia, Orange
#
# 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" . }}
      name: {{ include "common.release" . }}
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
    spec:
      initContainers: {{ include "common.certInitializer.initContainer" . | nindent 6 }}
      - command:
        - /app/ready.py
        args:
        - --container-name
        - aai-resources
        - --container-name
        - aai-traversal
        - --container-name
        - aai-graphadmin
        env:
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        image: {{ include "repositoryGenerator.image.readiness" . }}
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        name: {{ include "common.name" . }}-readiness
      containers:
      - name: {{ include "common.name" . }}
        image: "{{ include "repositoryGenerator.dockerHubRepository" . }}/{{ .Values.image }}"
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        volumeMounts:
        - mountPath: /etc/localtime
          name: localtime
          readOnly: true
        - mountPath: /dev/log
          name: aai-service-log
        - mountPath: /usr/local/etc/haproxy/haproxy.cfg
        {{ if .Values.global.installSidecarSecurity }}
          subPath: haproxy-pluggable-security.cfg
        {{ else }}
          subPath: haproxy.cfg
        {{ end }}
          name: haproxy-cfg
        {{- include "common.certInitializer.volumeMount" . | nindent 8 }}
        ports:
        - containerPort: {{ .Values.service.internalPort }}
        - containerPort: {{ .Values.service.internalPlainPort }}
        # disable liveness probe when breakpoints set in debugger
        # so K8s doesn't restart unresponsive container
        {{- if eq .Values.liveness.enabled true }}
        livenessProbe:
          tcpSocket:
            port: {{ (eq "true" (include "common.needTLS" .)) | ternary .Values.service.internalPort .Values.service.internalPlainPort }}
          initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
          periodSeconds: {{ .Values.liveness.periodSeconds }}
        {{ end -}}
        readinessProbe:
          httpGet:
            path: /aai/util/echo
            port: {{ (eq "true" (include "common.needTLS" .)) | ternary .Values.service.internalPort .Values.service.internalPlainPort }}
            #scheme: HTTPS
            scheme: {{ (eq "true" (include "common.needTLS" .)) | ternary "HTTPS" "HTTP" }}
            httpHeaders:
            - name: X-FromAppId
              value: OOM_ReadinessCheck
      {{ if .Values.global.installSidecarSecurity }}
            - name: Authorization
              value: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==
      {{ end }}
            - name: X-TransactionId
              value: OOM_ReadinessCheck_TID
            - name: Accept
              value: application/json
          initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
          periodSeconds: {{ .Values.readiness.periodSeconds }}
        resources:
{{ include "common.resources" . }}
      {{- if .Values.nodeSelector }}
      nodeSelector:
{{ toYaml .Values.nodeSelector | indent 8 }}
      {{- end -}}
      {{- if .Values.affinity }}
      affinity:
{{ toYaml .Values.affinity | indent 8 }}
      {{- end }}

      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
        - name: aai-service-log
          hostPath:
            path: "/dev/log"
        - name: haproxy-cfg
          configMap:
            name: aai-deployment-configmap
        {{ include "common.certInitializer.volumes" . | nindent 8 }}
      imagePullSecrets:
      - name: "{{ include "common.namespace" . }}-docker-registry-key"
