{{- include "nplus.init" $ -}}
# Component: {{ .component.chartName }}
# will connect to:
{{- if (.this.nappl).host }}
#   nappl: {{ if ($.this.nappl).ssl -}}https{{- else -}}http{{- end -}}://{{ ($.this.nappl).host }}:{{ (.this.nappl).port }}/{{ (.this.nappl).instance }}
{{- else }}
#   defined by config file in conf PV.
{{- end }}
#
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .component.fullName }}
  {{- if .this.utils.includeNamespace }}
  namespace: {{ .Release.Namespace }}
  {{- end }}
  labels:
    {{- include "nplus.instanceLabels" . | nindent 4 }}
  annotations:
    {{- include "nplus.argoWave" . | nindent 4 }}
    {{- include "nplus.annotations" . | nindent 4 }}
    {{- include "nplus.securityAnnotations" . | nindent 4 }}
spec:
  selector:
    matchLabels:
      {{- include "nplus.selectorLabels" . | nindent 6 }}
  replicas: {{ .Values.replicaCount }}
  strategy:
    type: RollingUpdate

  template:
    metadata:
      labels:
        {{- include "nplus.templateLabels" . | nindent 8 }}
      annotations:
        {{- include "nplus.templateAnnotations" . | nindent 8 }}
        {{- include "nplus.securityAnnotations" . | nindent 8 }}
    spec:
      {{- include "nplus.imagePullSecrets" . | nindent 6 }}
      {{- include "nplus.templateAffinity" . | nindent 6 }}
      {{- include "nplus.securityIllumioReadinessGates" . | nindent 6 }}
      {{- include "nplus.podSecurityContext" . | nindent 6 }}
      {{- include "nplus.terminationGracePeriodSeconds" . | nindent 6 }}

      initContainers:
      {{- include "nplus.waitFor" . | nindent 6 }}
      {{- include "nplus.copyConfig" . | nindent 6 }}

      containers:
      - name: erpproxy-connector
        image: {{ include "nplus.image"  (dict "global" .Values.global "image" .Values.image) }}
        imagePullPolicy: {{ include "nplus.imagePullPolicy" .Values.image }}
        {{- include "nplus.containerSecurityContext" . | nindent 8 }}
        env:
          # -- NAPPL Connection Settings
          # TODO: Die URL nach außen führen
          {{- include "nplus.env" (dict 
            "SAPPROXY_XSAP_SERVER"        ($.this.nappl).host
            "SAPPROXY_XSAP_PORT"          ($.this.nappl).port
            "SAPPROXY_XSAP_URL"           ($.this.nappl).url
            "SAPPROXY_XSAP_USE_SSL"       ($.this.nappl).ssl
          ) | nindent 10 }}

          # -- XSAP Settings
          {{- include "nplus.env" (dict 
            "SAPPROXY_XSAP_USE_SIGN"      ($.this.xsap).useSign
          ) | nindent 10 }}

          # -- Alien Settings
          {{- include "nplus.env" (dict 
            "SAPPROXY_ALIEN_SERVER"       ($.this.alien).server
            "SAPPROXY_ALIEN_PORT"         ($.this.alien).port
            "SAPPROXY_ALIEN_URL"          ($.this.alien).url
            "SAPPROXY_ALIEN_USE_SIGN"     ($.this.alien).useSign
            "SAPPROXY_ALIEN_USE_SSL"      ($.this.alien).ssl
            "SAPPROXY_ALIEN_DO_APPEND"    ($.this.alien).doAppend
          ) | nindent 10 }}

          # -- Signature Check Settings
          {{- include "nplus.env" (dict 
            "SAPPROXY_SIGN_KEY_ALIAS"     ($.this.sign).keyAlias
            "SAPPROXY_SIGN_KEY_PASSWORD"  ($.this.sign).keyPassword
            "SAPPROXY_SIGN_AUTHID"        ($.this.sign).authID
          ) | nindent 10 }}

          # -- Migration Settings
          {{- include "nplus.env" (dict 
            "SAPPROXY_MIGRATION_DO_MIGRATION"       ($.this.migration).enabled
            "SAPPROXY_MIGRATION_DELAY_SEC"          ($.this.migration).delay
            "SAPPROXY_MIGRATION_DO_LIST_MIGRATION"  ($.this.migration).doListMigration
            "SAPPROXY_MIGRATION_FILE_DELIMITER"     ($.this.migration).fileDelimiter
            "SAPPROXY_MIGRATION_CHECK_DOCUMENTS"    ($.this.migration).checkDocuments
            "SAPPROXY_MIGRATION_CHECK_IGNORETIME"   ($.this.migration).checkIgnoreTime
            "SAPPROXY_MIGRATION_VIA_FILESYSTEM"     ($.this.migration).viaFileSystem
          ) | nindent 10 }}

        {{- include "nplus.environment" . | nindent 8 }}
        
        {{- if .this.utils.maintenance }}
          {{- include "nplus.idle" . | nindent 8 }}
        {{- else }}
        startupProbe:
          initialDelaySeconds: 10
          failureThreshold: 12
          periodSeconds: 10
          timeoutSeconds: 5
          tcpSocket:
            port: {{ include "nplus.backendPort" . }}
        #TODO: 9.3: Hier fehlt die echte Readiness Probe, die gibt es auch bei der CT nocht nicht.
        readinessProbe:
          tcpSocket:
            port: {{ include "nplus.backendPort" . }}
          # initialDelaySeconds: 20
          periodSeconds: 10
        # -- Ceyoniq does currently not define an *official* livenessProbe, so we use
        # one that quickly checks the main socket on Layer 4.
        livenessProbe:
          tcpSocket:
            port: {{ include "nplus.backendPort" . }}
          # initialDelaySeconds: 20
          periodSeconds: 10
        {{- end }}
        
        ports:
        {{- include "nplus.defaultContainerPorts" . | nindent 8 }}
          
        {{- include "nplus.resources" . | nindent 8 }}

        volumeMounts:
        {{- include "nplus.defaultMounts" . | nindent 8 }}

      volumes:
      {{- include "nplus.defaultVolumes" . | nindent 6 }}

