# Copyright © 2020 Wipro Limited.
#
# 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
  nodePortPrefixExt: 304
  persistence:
    mountPath: /dockerdata-nfs
  security:
    aaf:
      enabled: false
  aaf:
    auth:
      header: Basic c29Ac28ub25hcC5vcmc6ZGVtbzEyMzQ1Ngo=
  mariadbGalera:
    serviceName: mariadb-galera
    servicePort: '3306'

# Secrets metaconfig
#################################################################
db:
  userName: so_user
  userPassword: so_User123
  # userCredsExternalSecret: some secret
  adminName: so_admin
  adminPassword: so_Admin123
  # adminCredsExternalSecret: some secret
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
  - uid: oof-adapter-mso-key
    type: password
    externalSecret: '{{ tpl (default "" .Values.mso.msoKeySecret) . }}'
    password: '{{ .Values.mso.msoKey }}'
  - uid: oof-auth
    type: basicAuth
    externalSecret: '{{ tpl (default "" .Values.mso.oof.authSecret) . }}'
    login: '{{ .Values.mso.oof.login }}'
    password: '{{ .Values.mso.oof.password }}'
    passwordPolicy: required


#secretsFilePaths: |
#  - 'my file 1'
#  - '{{ include "templateThatGeneratesFileName" . }}'

#################################################################
# Application configuration defaults.
#################################################################
image: onap/so/so-oof-adapter:1.8.3
pullPolicy: Always

mso:
  msoKey: 07a7159d3bf51a0e53be7a8f89699be7
  oof:
    login: test
    password: testpwd

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


soHelpers:
  nameOverride: so-oof-adapter-cert-init
  certInitializer:
    nameOverride: so-oof-adapter-cert-init
    credsPath: /opt/app/osaaf/local
  cadi:
    apiEnforcement: org.onap.so.oofadapterPerm
  containerPort: *containerPort

# Resource Limit flavor -By Default using small
flavor: small
# Segregation for Different environment (Small and Large)
resources:
  small:
    limits:
      memory: 4Gi
      cpu: 2000m
    requests:
      memory: 1Gi
      cpu: 500m
  large:
    limits:
      memory: 8Gi
      cpu: 4000m
    requests:
      memory: 2Gi
      cpu: 1000m
  unlimited: {}
livenessProbe:
    path: /manage/health
    port: *containerPort
    scheme: HTTP
    initialDelaySeconds: 600
    periodSeconds: 60
    timeoutSeconds: 10
    successThreshold: 1
    failureThreshold: 3
ingress:
  enabled: false
nodeSelector: {}
tolerations: []
affinity: {}

#Pods Service Account
serviceAccount:
  nameOverride: so-oof-adapter
  roles:
    - read

#Log configuration
log:
  path: /var/log/onap
logConfigMapNamePrefix: '{{ include "common.fullname" . }}'
