# 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.

#################################################################
# Global configuration defaults.
#################################################################
global:
  persistence:
    mountPath: /dockerdata-nfs
  mariadbGalera:
    service: mariadb-galera
    servicePort: '3306'

#################################################################
# Secrets metaconfig
#################################################################
secrets:
  - uid: db-user-creds
    type: basicAuth
    externalSecret: '{{ tpl (default "" .Values.db.userCredsExternalSecret) . }}'
    login: '{{ .Values.db.userName }}'
    password: '{{ .Values.db.userPassword }}'
    passwordPolicy: required
  - uid: db-admin-creds
    type: basicAuth
    externalSecret: '{{ tpl (default "" .Values.db.adminCredsExternalSecret) . }}'
    login: '{{ .Values.db.adminName }}'
    password: '{{ .Values.db.adminPassword }}'
    passwordPolicy: required

#################################################################
# Application configuration defaults.
#################################################################
image: onap/so/so-cnfm-as-lcm:1.12.1
pullPolicy: Always

aai:
  auth: 2A11B07DB6214A839394AA1EC5844695F5114FC407FF5422625FB00175A3DCB8A1FF745F22867EFA72D5369D599BBD88DA8BED4233CF5586

readinessCheck:
  wait_for:
    jobs:
      - '{{ include "common.release" . }}-so-mariadb-config-job'

# Local mariadb galera instance default name
mariadb-galera:
  nameOverride: so-mariadb-galera
  service:
    internalPort: 3306
  mariadbOperator:
    galera:
      enabled: false

db:
  userName: so_user
  userPassword: so_User123
  # userCredsExternalSecret: some secret
  adminName: so_admin
  adminPassword: so_Admin123
  # adminCredsExternalSecret: some secret
mso:
  key: 07a7159d3bf51a0e53be7a8f89699be7
sdc:
  username: mso
  password: 76966BDD3C7414A03F7037264FF2E6C8EEC6C28F2B67F2840A1ED857C0260FEE731D73F47F828E5527125D29FD25D3E0DE39EE44C058906BF1657DE77BF897EECA93BDC07FA64F
  key: 566B754875657232314F5548556D3665

replicaCount: 1
minReadySeconds: 10
containerPort: &containerPort 9888
logPath: ./logs/so-cnfm-lcm/
app: so-cnfm-lcm
service:
  type: ClusterIP
  ports:
    - name: http
      port: *containerPort
updateStrategy:
  type: RollingUpdate
  maxUnavailable: 1
  maxSurge: 1

#################################################################
# soHelpers part
#################################################################
soHelpers:
  containerPort: *containerPort

# Resource Limit flavor -By Default using small
flavor: small
# Segregation for Different environment (Small and Large)
resources:
  small:
    limits:
      cpu: "2000m"
      memory: "4Gi"
    requests:
      cpu: "500m"
      memory: "1Gi"
  large:
    limits:
      cpu: "4000m"
      memory: "8Gi"
    requests:
      cpu: "1000m"
      memory: "2Gi"
  unlimited: {}

livenessProbe:
  port: *containerPort
  initialDelaySeconds: 600
  periodSeconds: 60
  timeoutSeconds: 10
  successThreshold: 1
  failureThreshold: 3

ingress:
  enabled: false
  service:
    - baseaddr: 'so-cnfm-lcm-api'
      name: 'so-cnfms-lcm'
      port: *containerPort
  config:
    ssl: 'redirect'

serviceMesh:
  authorizationPolicy:
    authorizedPrincipals:
      - serviceAccount: so-read
      - serviceAccount: istio-ingress
        namespace: istio-ingress

nodeSelector: {}

tolerations: []

affinity: {}

#Pods Service Account
serviceAccount:
  nameOverride: so-cnfm-lcm
  roles:
    - read

