# ============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.3.0
containerPort: &svc_port 8080
managementPort: &mgt_port 8081

prometheus:
  enabled: false

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:
    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: 999
      memory: 1Gi
    requests:
      cpu: 1
      memory: 1Gi
  large:
    limits:
      cpu: 999
      memory: 2Gi
    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: "cps-ncmp-dmi-plugin-api"
      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

  dmiServiceUrl: 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: DEBUG
  cps: DEBUG
  path: /tmp

readinessCheck:
  wait_for:
    - cps-core

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

# Strimzi KafkaUser and Topic config
kafkaTopic:
  - name: &ncmpDmiCmAvcSubscriptionNcmpDmiPluginTopic ncmp-dmi-cm-avc-subscription-ncmp-dmi-plugin
    retentionMs: 7200000
    segmentBytes: 1073741824
  - name: &dmiNcmpCmAvcSubscriptionTopic dmi-ncmp-cm-avc-subscription
    retentionMs: 7200000
    segmentBytes: 1073741824
  - name: &ncmpAsyncM2MTopic ncmp-async-m2m
    retentionMs: 7200000
    segmentBytes: 1073741824

kafkaUser:
  authenticationType: scram-sha-512
  acls:
    - name: ncmp-dmi-plugin-group
      type: group
      operations: [Read]
    - name: *ncmpDmiCmAvcSubscriptionNcmpDmiPluginTopic
      type: topic
      operations: [Read]
    - name: *dmiNcmpCmAvcSubscriptionTopic
      type: topic
      operations: [Write]
    - name: *ncmpAsyncM2MTopic
      type: topic
      operations: [Write]

topics:
  config:
    app.ncmp.async.topic: *ncmpAsyncM2MTopic
    app.dmi.avc.subscription-topic: *ncmpDmiCmAvcSubscriptionNcmpDmiPluginTopic
    app.dmi.avc.subscription-response-topic: *dmiNcmpCmAvcSubscriptionTopic
