# ============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: app-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.sdnc.username }}'
    password: '{{ .Values.config.sdnc.password }}'
    passwordPolicy: required
  - uid: cps-core-creds
    type: basicAuth
    externalSecret: '{{ tpl (default "" .Values.config.cpsCore.credsExternalSecret) . }}'
    login: '{{ .Values.config.cpsCore.username }}'
    password: '{{ .Values.config.cpsCore.password }}'
    passwordPolicy: generate

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

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

prometheus:
  enabled: true

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

metrics:
  serviceMonitor:
    enabled: true
    port: http-management
      ## specify target port if name is not given to the port in the service definition
      ##
    # targetPort: 8080
    path: /manage/prometheus
    interval: 60s
    basicAuth:
      enabled: false

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: *svc_name
      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
  #appUserPassword:
  spring:
    profile: helm

  dmiServiceName: http://*svc_name:*svc_port
  sdnc:
    url: http://sdnc:8181
    username: admin
    password: Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
    topologyId: topology-netconf
  cpsCore:
    url: http://cps-core:8080
    username: cpsuser
    #password:

# 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

minReadySeconds: 10
updateStrategy:
  type: RollingUpdate
  maxUnavailable: 0
  maxSurge: 1
