{{/*
# Copyright © 2020 Amdocs, Bell Canada, highstreet technologies GmbH
#
# 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.
*/}}

{{/*
  common templates to enable aaf configs for applictaions

  Parameter for aafConfig to be defined in values.yaml
  aafConfig:   --> if a different key is used, call templates with argument (dict "aafRoot" .Values.<yourkey> "dot" .)
    # additional scripts can be defined to handle certs
    addconfig: true|false
    fqdn: "sdnc"
    app_ns: "org.osaaf.aaf"
    fqi: "sdnc@sdnc.onap.org"
    fqi_namespace: org.onap.sdnc
    public_fqdn: "aaf.osaaf.org"
    aafDeployFqi: "deployer@people.osaaf.org"
    aafDeployPass: demo123456!
    cadi_latitude: "38.0"
    cadi_longitude: "-72.0"
    secret_uid: &aaf_secret_uid my-component-aaf-deploy-creds

  # secrets configuration, Note: create a secrets template
  secrets:
    - uid: *aaf_secret_uid
      type: basicAuth
      externalSecret: '{{ ternary (tpl (default "" .Values.aafConfig.aafDeployCredsExternalSecret) .) "aafIsDisabled" .Values.global.aafEnabled }}'
      login: '{{ .Values.aafConfig.aafDeployFqi }}'
      password: '{{ .Values.aafConfig.aafDeployPass }}'
      passwordPolicy: required

  In deployments/jobs/stateful include:
  initContainers:
    {{ include "common.aaf-config" . | nindent XX}}

  containers:
    volumeMounts:
    {{- if .Values.global.aafEnabled }}
     - mountPath: "/opt/app/osaaf"
       name: {{ include "common.fullname" . }}-aaf-config
       {{- end }}
  volumes:
  {{- include "common.aaf-config-volumes" . | nindent XX}}
*/}}
{{- define "common.aaf-config" -}}
{{-   $dot := default . .dot -}}
{{-   $aafRoot := default $dot.Values.aafConfig .aafRoot -}}
{{-   if $dot.Values.global.aafEnabled -}}
- name: {{ include "common.name" $dot }}-aaf-readiness
  image: "{{ $dot.Values.global.readinessRepository }}/{{ $dot.Values.global.readinessImage }}"
  imagePullPolicy: {{ $dot.Values.global.pullPolicy | default $dot.Values.pullPolicy }}
  command:
  - /root/ready.py
  args:
  - --container-name
  - aaf-locate
  - --container-name
  - aaf-cm
  - --container-name
  - aaf-service
  env:
  - name: NAMESPACE
    valueFrom:
      fieldRef:
        apiVersion: v1
        fieldPath: metadata.namespace
- name: {{ include "common.name" $dot }}-aaf-config
  image: {{ (default $dot.Values.repository $dot.Values.global.repository) }}/{{ $dot.Values.global.aafAgentImage }}
  imagePullPolicy: {{ $dot.Values.global.pullPolicy | default $dot.Values.pullPolicy }}
  volumeMounts:
  - mountPath: "/opt/app/osaaf"
    name: {{ include "common.fullname" $dot }}-aaf-config
{{-     if $aafRoot.addconfig }}
  - name: aaf-add-config
    mountPath: /opt/app/aaf_config/bin/aaf-add-config.sh
    subPath: aaf-add-config.sh
{{-     end }}
  command:
    - sh
    - -c
    - |
      #!/usr/bin/env bash
      /opt/app/aaf_config/bin/agent.sh
{{-     if $aafRoot.addconfig }}
      /opt/app/aaf_config/bin/aaf-add-config.sh
{{-     end }}
  env:
    - name: APP_FQI
      value: "{{ $aafRoot.fqi }}"
    - name: aaf_locate_url
      value: "https://aaf-locate.{{ $dot.Release.Namespace}}:8095"
    - name: aaf_locator_container
      value: "oom"
    - name: aaf_locator_container_ns
      value: "{{ $dot.Release.Namespace }}"
    - name: aaf_locator_fqdn
      value: "{{ $aafRoot.fqdn }}"
    - name: aaf_locator_app_ns
      value: "{{ $aafRoot.app_ns }}"
    - name: DEPLOY_FQI
    {{- include "common.secret.envFromSecret" (dict "global" $dot "uid" $aafRoot.secret_uid "key" "login") | indent 6 }}
    - name: DEPLOY_PASSWORD
    {{- include "common.secret.envFromSecret" (dict "global" $dot "uid" $aafRoot.secret_uid "key" "password") | indent 6 }}
  #Note: want to put this on Nodes, eventually
    - name: cadi_longitude
      value: "{{ default "52.3" $aafRoot.cadi_longitude }}"
    - name: cadi_latitude
      value: "{{ default "13.2" $aafRoot.cadi_latitude }}"
  #Hello specific.  Clients don't don't need this, unless Registering with AAF Locator
    - name: aaf_locator_public_fqdn
      value: "{{ $aafRoot.public_fqdn | default "" }}"
{{-   end -}}
{{- end -}}

{{- define "common.aaf-config-volume-mountpath" -}}
{{-   if .Values.global.aafEnabled -}}
- mountPath: "/opt/app/osaaf"
  name: {{ include "common.fullname" . }}-aaf-config
{{-   end -}}
{{- end -}}

{{- define "common.aaf-config-volumes" -}}
{{-   $dot := default . .dot -}}
{{-   $aafRoot := default $dot.Values.aafConfig .aafRoot -}}
{{-   if $dot.Values.global.aafEnabled -}}
- name: {{ include "common.fullname" $dot }}-aaf-config
  emptyDir:
    medium: Memory
{{-     if $aafRoot.addconfig }}
- name: aaf-add-config
  configMap:
    name: {{ include "common.fullname" $dot }}-aaf-add-config
    defaultMode: 0700
{{-     end -}}
{{-   end -}}
{{- end -}}
