# ============LICENSE_START=======================================================
# Copyright (C) 2021 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.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================

#################################################################
# Secrets.
#################################################################
secrets:
  - uid: user-creds
    type: basicAuth
    externalSecret: '{{ tpl (default "" .Values.config.appUserExternalSecret) . }}'
    login: '{{ .Values.config.appUserName }}'
    password: '{{ .Values.config.appUserPassword }}'
    passwordPolicy: generate
  - uid: sdnc-creds
    type: basicAuth
    externalSecret: '{{ tpl (default "" .Values.config.odlCredsExternalSecret) . }}'
    login: '{{ .Values.config.sdncUser }}'
    password: '{{ .Values.config.sdncPassword }}'
    passwordPolicy: required
  - uid: core-creds
    type: basicAuth
    externalSecret: '{{ tpl (default "" .Values.config.coreCredsExternalSecret) . }}'
    login: '{{ .Values.config.coreUser }}'
    password: '{{ .Values.config.corePassword }}'
    passwordPolicy: generate

#################################################################
# Global configuration defaults.
#################################################################
global:
  ingress:
    virtualhost:
      baseurl: "simpledemo.onap.org"

image: onap/ncmp-dmi-plugin:0.0.1
containerPort: &svc_port 8080
managementPort: &mgt_port 8081

prometheus:
  enabled: true
  interval: 60s

service:
  type: ClusterIP
  name: ncmp-dmi-plugin
  ports:
    - name: &port http
      port: *svc_port
    - name: management
      port: *mgt_port
      targetPort: *mgt_port

pullPolicy: IfNotPresent
# flag to enable debugging - application support required
debugEnabled: false
nodeSelector: {}
affinity: {}
# Resource Limit flavor -By Default using small
flavor: small
# default number of instances
replicaCount: 1
# Segregation for Different environment (Small and Large)
resources:
  small:
    limits:
      cpu: 2
      memory: 2Gi
    requests:
      cpu: 1
      memory: 1Gi
  large:
    limits:
      cpu: 4
      memory: 4Gi
    requests:
      cpu: 2
      memory: 2Gi
  unlimited: {}
# probe configuration parameters
liveness:
  initialDelaySeconds: 20
  periodSeconds: 20
  # necessary to disable liveness probe when setting breakpoints
  # in debugger so K8s doesn't restart unresponsive container
  enabled: true
  path: /manage/health
  port: *mgt_port

readiness:
  initialDelaySeconds: 15
  periodSeconds: 15
  path: /manage/health
  port: *mgt_port

ingress:
  enabled: true
  service:
    - baseaddr: "ncmp-dmi-plugin"
      path: "/"
      name: "ncmp-dmi-plugin"
      port: *svc_port

serviceAccount:
  nameOverride: ncmp-dmi-plugin
  roles:
    - read

securityContext:
  user_id: 100
  group_id: 655533

#################################################################
# Application configuration defaults.
#################################################################

config:

  # REST API basic authentication credentials (passsword is generated if not provided)
  appUserName: ncmpuser
  spring:
    profile: helm
  #appUserPassword:

  sdncUser: admin
  sdncPassword: Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U

  coreUser: cpsuser

# Any new property can be added in the env by setting in overrides in the format mentioned below
# All the added properties must be in "key: value" format insead of yaml.
#  additional:
#    spring.config.max-size: 200
#    spring.config.min-size: 10

logging:
  level: INFO
  cps: DEBUG
  path: /tmp

readinessCheck:
  wait_for:
    - cps-core
