{{/*
# 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 }}
  strategy:
    type: {{ .Values.updateStrategy.type }}
    {{- if (eq "RollingUpdate" .Values.updateStrategy.type) }}
    rollingUpdate:
      maxUnavailable: {{ .Values.updateStrategy.maxUnavailable }}
      maxSurge: {{ .Values.updateStrategy.maxSurge }}
    {{- end }}
  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:
      terminationGracePeriodSeconds: {{ .Values.service.terminationGracePeriodSeconds }}
      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
        resources:
          requests:
            memory: {{ .Values.haproxy.initContainers.resources.memory }}
            cpu: {{ .Values.haproxy.initContainers.resources.cpu }}
          limits:
            memory: {{ .Values.haproxy.initContainers.resources.memory }}
            cpu: {{ .Values.haproxy.initContainers.resources.cpu }}
      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 }}
        - containerPort: {{ .Values.metricsService.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: {{ (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 }}
      serviceAccountName: {{ include "common.fullname" (dict "suffix" "read" "dot" . )}}
      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"
