{{/*
# Copyright (c) 2018 Amdocs, Bell Canada, AT&T
# Modifications Copyright (c) 2020 Nokia, Orange
# Modifications Copyright © 2023 Nordix Foundation
#
# 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:
      - 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
        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: {{ .Values.service.internalPlainPort }}
          initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
          periodSeconds: {{ .Values.liveness.periodSeconds }}
        {{ end -}}
        readinessProbe:
          httpGet:
            path: /aai/util/echo
            port: {{ .Values.service.internalPlainPort }}
            scheme: 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" . | nindent 10 }}
      {{- 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
      imagePullSecrets:
      - name: "{{ include "common.namespace" . }}-docker-registry-key"
