# Copyright © 2020 Bell Canada, Samsung Electronics
#
# 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.

global:
  aafAgentImage: onap/aaf/aaf_agent:2.1.20
  aafEnabled: true
  # Give the name of a config map where certInitializer will onboard all certs
  # given (certs must be in pem format)
  customCertsConfigMap:
  # Give the name of a secret where certInitializer will onboard all certs given
  # (certs must be in pem format)
  # this one superseedes previous one (so if both are given, only certs from
  # secret will be onboarded).
  customCertsSecret:


pullPolicy: Always

secrets:
  - uid: deployer-creds
    type: basicAuth
    externalSecret: '{{ ternary (tpl (default "" .Values.aafDeployCredsExternalSecret) .) "aafIsDisabled" .Values.global.aafEnabled }}'
    login: '{{ .Values.aafDeployFqi }}'
    password: '{{ .Values.aafDeployPass }}'
    passwordPolicy: required
  - uid: truststore-creds
    type: password
    externalSecret: '{{ tpl (default "" .Values.truststoreCredsExternalSecret) . }}'
    password: '{{ .Values.truststorePassword }}'
    passwordPolicy: required

readinessCheck:
  wait_for:
    - aaf-locate
    - aaf-cm
    - aaf-service

fqdn: ""
app_ns: "org.osaaf.aaf"
fqi: ""
fqi_namespace: ""
public_fqdn: "aaf.osaaf.org"
aafDeployFqi: "deployer@people.osaaf.org"
aafDeployPass: demo123456!
cadi_latitude: "38.0"
cadi_longitude: "-72.0"
aaf_add_config: ""
mountPath: "/opt/app/osaaf"
appMountPath: "/opt/app/osaaf"
importCustomCertsEnabled: false
truststoreMountpath: ""
truststoreOutputFileName: truststore.jks
truststorePassword: changeit
envVarToCheck: cadi_keystore_password_p12
# ingressTlsSecret:

# This introduces implicit dependency on cert-wrapper
# if you are using cert initializer cert-wrapper has to be also deployed.
# We had to move this CM to a separate chart to reduce the total size of our charts
# as it exceeds the default helm limits.
certsCMName: '{{ include "common.release" . }}-cert-wrapper-certs'
