# Copyright 2018 Intel Corporation, Inc
# Modifications © 2020 AT&T, 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.

#################################################################
# Global configuration defaults.
#################################################################
global:
  nodePortPrefix: 302
  persistence: {}
  aafEnabled: true

flavor: small

#################################################################
# AAF part
#################################################################
certInitializer:
  nameOverride: aaf-sms-cert-init
  aafDeployFqi: deployer@people.osaaf.org
  aafDeployPass: demo123456!
  # aafDeployCredsExternalSecret: some secret
  fqdn: aaf-sms
  fqi: aaf-sms@aaf-sms.onap.org
  public_fqdn: aaf-sms.onap.org
  cadi_longitude: "0.0"
  cadi_latitude: "0.0"
  app_ns: org.osaaf.aaf
  mountPath: /opt/app/osaaf
  keystore: truststoreONAPall.jks
  keystore_pass: changeit
  root_ca_alias: onaptestca
  root_ca_name: aaf_root_ca.cer
  permission_user: 1000
  permission_group: 1000
  aaf_add_config: >
    cd {{ .Values.mountPath }}/local;
    keytool -exportcert -rfc -file {{ .Values.root_ca_name }} -keystore {{ .Values.keystore }}
    -alias {{ .Values.root_ca_alias }} -storepass {{ .Values.keystore_pass }};
    chown -R {{.Values.permission_user}}:{{.Values.permission_group}}
    {{ .Values.mountPath }};

#################################################################
# Application configuration defaults.
#################################################################
# application image
image: onap/aaf/sms:4.0.2
pullPolicy: Always

# flag to enable debugging - application support required
debugEnabled: false

# application configuration
# Example:
config:
  smsdbaddress: "http://aaf-sms-db:8200"
  cafile: "/opt/app/osaaf/local/aaf_root_ca.cer"
  servercert: "/opt/app/osaaf/local/org.onap.aaf-sms.crt"
  serverkey: "/opt/app/osaaf/local/org.onap.aaf-sms.key"
  password: "c2VjcmV0bWFuYWdlbWVudHNlcnZpY2VzZWNyZXRwYXNzd29yZA=="

# subchart configuration
vault:
  nameOverride: smsdb

# default number of instances
replicaCount: 1

nodeSelector: {}

affinity: {}

# probe configuration parameters
liveness:
  initialDelaySeconds: 10
  periodSeconds: 30
  # necessary to disable liveness probe when setting breakpoints
  # in debugger so K8s doesn't restart unresponsive container
  enabled: true

readiness:
  initialDelaySeconds: 10
  periodSeconds: 30

service:
  type: ClusterIP
  name: aaf-sms
  portName: aaf-sms
  internalPort: 10443
  externalPort: 10443

#define value for aaf-sms-quorumclient subchart
aaf-sms-quorumclient:
  service:
    name: aaf-sms

persistence:
  enabled: true
  volumeReclaimPolicy: Retain
  accessMode: ReadWriteOnce
  size: 1Gi
  mountPath: /dockerdata-nfs
  mountSubPath: sms/auth

ingress:
  enabled: false

secrets:
  - uid: aai-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.aaiUsername }}'
    password: '{{ .Values.oofCreds.aaiPassword }}'
    passwordPolicy: required
  - uid: conductor-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.conductorUsername }}'
    password: '{{ .Values.oofCreds.conductorPassword }}'
    passwordPolicy: required
  - uid: sdnc-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.sdncUsername }}'
    password: '{{ .Values.oofCreds.sdncPassword }}'
    passwordPolicy: required
  - uid: music-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.musicUsername }}'
    password: '{{ .Values.oofCreds.musicPassword }}'
    passwordPolicy: required
  - uid: aaf-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.aafUsername }}'
    password: '{{ .Values.oofCreds.aafPassword }}'
    passwordPolicy: required
  - uid: policy-plat-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.policyPlatUsername }}'
    password: '{{ .Values.oofCreds.policyPlatPassword }}'
    passwordPolicy: required
  - uid: policy-cli-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.policyCliUsername }}'
    password: '{{ .Values.oofCreds.policyCliPassword }}'
    passwordPolicy: required
  - uid: osdf-placement-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.osdfPlacementUsername }}'
    password: '{{ .Values.oofCreds.osdfPlacementPassword }}'
    passwordPolicy: required
  - uid: osdf-placement-so-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.osdfPlacementSOUsername }}'
    password: '{{ .Values.oofCreds.osdfPlacementSOPassword }}'
    passwordPolicy: required
  - uid: osdf-placement-vfc-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.osdfPlacementVFCUsername }}'
    password: '{{ .Values.oofCreds.osdfPlacementVFCPassword }}'
    passwordPolicy: required
  - uid: osdf-cm-scheduler-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.osdfCMSchedulerUsername }}'
    password: '{{ .Values.oofCreds.osdfCMSchedulerPassword }}'
    passwordPolicy: required
  - uid: config-db-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.configDbUsername }}'
    password: '{{ .Values.oofCreds.configDbPassword }}'
    passwordPolicy: required
  - uid: osdf-pci-opt-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.osdfPCIOptUsername }}'
    password: '{{ .Values.oofCreds.osdfPCIOptPassword }}'
    passwordPolicy: required
  - uid: osdf-opt-engine-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.osdfOptEngineUsername }}'
    password: '{{ .Values.oofCreds.osdfOptEnginePassword }}'
    passwordPolicy: required
  - uid: so-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.soUsername }}'
    password: '{{ .Values.oofCreds.soPassword }}'
    passwordPolicy: required
  - uid: sdc-creds
    type: basicAuth
    login: '{{ .Values.oofCreds.sdcUsername }}'
    password: '{{ .Values.oofCreds.sdcPassword }}'
    passwordPolicy: required
oofCreds:
  aaiUsername: oof@oof.onap.org
  aaiPassword: demo123456!

  conductorUsername: admin1
  conductorPassword: plan.15

  sdncUsername: admin
  sdncPassword: Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U

  musicUsername: conductor
  musicPassword: c0nduct0r

  aafUsername: aaf_admin@people.osaaf.org
  aafPassword: demo123456!

  policyPlatUsername: healthcheck
  policyPlatPassword: zb!XztG34

  policyCliUsername: healthcheck
  policyCliPassword: zb!XztG34

  osdfPlacementUsername: test
  osdfPlacementPassword: testpwd

  osdfPlacementSOUsername: so_test
  osdfPlacementSOPassword: so_testpwd

  osdfPlacementVFCUsername: vfc_test
  osdfPlacementVFCPassword: vfc_testpwd

  osdfCMSchedulerUsername: test1
  osdfCMSchedulerPassword: testpwd1

  configDbUsername: osdf
  configDbPassword: passwd

  osdfPCIOptUsername: pci_test
  osdfPCIOptPassword: pci_testpwd

  osdfOptEngineUsername: opt_test
  osdfOptEnginePassword: opt_testpwd

  soUsername: apihBpmn
  soPassword: password1$

  sdcUsername: aai
  sdcPassword: Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U

# Configure resource requests and limits
resources:
  small:
    limits:
      cpu: 100m
      memory: 400Mi
    requests:
      cpu: 25m
      memory: 10Mi
  large:
    limits:
      cpu: 400m
      memory: 1Gi
    requests:
      cpu: 25m
      memory: 100Mi
  unlimited: {}
