# ============= LICENSE_START ================================================
# ============================================================================
# Copyright (C) 2021 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.
# ============= LICENSE_END ==================================================

#################################################################
# Global Configuration Defaults.
#################################################################
global:
  nodePortPrefix: 302
  nodePortPrefixExt: 304

#################################################################
# Filebeat Configuration Defaults.
#################################################################
filebeatConfig:
  logstashServiceName: log-ls
  logstashPort: 5044

#################################################################
# Secrets Configuration.
#################################################################
secrets:
  - uid: &aafCredsUID aafcreds
    type: basicAuth
    login: '{{ .Values.aafCreds.identity }}'
    password: '{{ .Values.aafCreds.password }}'
    passwordPolicy: required
  - uid: &pgUserCredsSecretUid pg-user-creds
    name: &pgUserCredsSecretName '{{ include "common.release" . }}-sonhms-pg-user-creds'
    type: basicAuth
    externalSecret: '{{ ternary "" (tpl (default "" .Values.postgres.config.pgUserExternalSecret) .) (hasSuffix "sonhms-pg-user-creds" .Values.postgres.config.pgUserExternalSecret) }}'
    login: '{{ .Values.postgres.config.pgUserName }}'
    password: '{{ .Values.postgres.config.pgUserPassword }}'
    passwordPolicy: generate

#################################################################
# InitContainer Images.
#################################################################
tlsImage: onap/org.onap.dcaegen2.deployments.tls-init-container:2.1.0
consulLoaderImage: onap/org.onap.dcaegen2.deployments.consul-loader-container:1.1.1

#################################################################
# Application Configuration Defaults.
#################################################################
# Application Image
image: onap/org.onap.dcaegen2.services.son-handler:2.1.5
pullPolicy: Always

# Log directory where logging sidecar should look for log files
# if absent, no sidecar will be deployed
logDirectory: /var/log/ONAP/dcaegen2/services/sonhms

# Directory where TLS certs should be stored
# if absent, no certs will be retrieved and stored
certDirectory: /opt/app/sonhms/etc/certs

# TLS role -- set to true if microservice acts as server
# If true, an init container will retrieve a server cert
# and key from AAF and mount them in certDirectory.
tlsServer: true

# Policy configuraiton properties
# if present, policy-sync side car will be deployed
dcaePolicySyncImage: onap/org.onap.dcaegen2.deployments.dcae-services-policy-sync:1.0.1
policies:
  policyID: |
    '["com.Config_PCIMS_CONFIG_POLICY"]'

# Dependencies
readinessCheck:
  wait_for:
    - dcae-config-binding-service
    - aaf-cm
    - &postgresName dcae-sonhms-postgres

# Probe Configuration
readiness:
  initialDelaySeconds: 10
  periodSeconds: 15
  timeoutSeconds: 1
  path: /healthcheck
  scheme: HTTPS
  port: 8080

# Service Configuration
service:
  type: ClusterIP
  name: dcae-son-handler
  ports:
    - name: https
      port: 8080
      port_protocol: http

# AAF Credentials
aafCreds:
  identity: dcae@dcae.onap.org
  password: demo123456!

credentials:
- name: AAF_IDENTITY
  uid: *aafCredsUID
  key: login
- name: AAF_PASSWORD
  uid: *aafCredsUID
  key: password
- name: PG_USERNAME
  uid:  *pgUserCredsSecretUid
  key: login
- name: PG_PASSWORD
  uid: *pgUserCredsSecretUid
  key: password


# Initial Application Configuration
applicationConfig:
  postgres.host: &dcaeSonhmsPgPrimary dcae-sonhms-pg-primary
  postgres.port: 5432
  postgres.username: ${PG_USERNAME}
  postgres.password: ${PG_PASSWORD}
  sonhandler.pollingInterval: 20
  sonhandler.pollingTimeout: 60
  cbsPollingInterval: 60
  sonhandler.numSolutions: 5
  sonhandler.minCollision: 5
  sonhandler.minConfusion: 5
  sonhandler.maximumClusters: 5
  sonhandler.badThreshold: 50
  sonhandler.poorThreshold: 70
  sonhandler.namespace: onap
  sonhandler.sourceId: SONHMS
  sonhandler.dmaap.server: ["message-router"]
  sonhandler.bufferTime: 60
  sonhandler.cg: sonhms-cg
  sonhandler.cid: sonhms-cid
  sonhandler.configDb.service: http://configdb:8080
  sonhandler.oof.service: https://oof-osdf:8698
  sonhandler.oof.endpoint: /api/oof/v1/pci
  sonhandler.pciOptimizer: pci
  sonhandler.pciAnrOptimizer: pci_anr
  sonhandler.poorCountThreshold: 3
  sonhandler.badCountThreshold: 3
  sonhandler.oofTriggerCountTimer: 30
  sonhandler.oofTriggerCountThreshold: 5
  sonhandler.policyRespTimer: 10
  sonhandler.policyNegativeAckThreshold: 3
  sonhandler.policyFixedPciTimeInterval: 30000
  sonhandler.nfNamingCode: RansimAgent
  streams_publishes:
    CL_topic:
      type: message-router
      aaf_username: ${AAF_IDENTITY}
      aaf_password: ${AAF_PASSWORD}
      dmaap_info:
        topic_url: https://message-router:3905/events/unauthenticated.DCAE_CL_OUTPUT
  streams_subscribes:
    performance_management_topic:
      type: message-router
      aaf_username: ${AAF_IDENTITY}
      aaf_password: ${AAF_PASSWORD}
      dmaap_info:
        topic_url: https://message-router:3905/events/unauthenticated.VES_MEASUREMENT_OUTPUT
    fault_management_topic:
      type: message-router
      aaf_username: ${AAF_IDENTITY}
      aaf_password: ${AAF_PASSWORD}
      dmaap_info:
        topic_url: https://message-router:3905/events/unauthenticated.SEC_FAULT_OUTPUT
    nbr_list_change_topic:
      type: message-router
      aaf_username: ${AAF_IDENTITY}
      aaf_password: ${AAF_PASSWORD}
      dmaap_info:
        topic_url: https://message-router:3905/events/PCI-NOTIF-TOPIC-NGHBR-LIST-CHANGE-INFO
    dcae_cl_response_topic:
      type: message-router
      aaf_username: ${AAF_IDENTITY}
      aaf_password: ${AAF_PASSWORD}
      dmaap_info:
        topic_url: https://message-router:3905/events/DCAE_CL_RSP
  service_calls:
      sdnr-getpnfname: []
      sdnr-getpci: []
      sdnr-getnbrlist: []
      sdnr-getcelllist: []
      oof-req: []
      policy-req: []

applicationEnv:
  STANDALONE: 'false'

# Resource Limit Flavor -By Default Using Small
flavor: small

# Segregation for Different Environment (Small and Large)
resources:
  small:
    limits:
      cpu: 1
      memory: 1Gi
    requests:
      cpu: 1
      memory: 1Gi
  large:
    limits:
      cpu: 2
      memory: 2Gi
    requests:
      cpu: 2
      memory: 2Gi
  unlimited: {}

#################################################################
# Application configuration Overriding Defaults in the Postgres.
#################################################################
postgres:
  nameOverride: *postgresName
  service:
    name: *postgresName
    name2: *dcaeSonhmsPgPrimary
    name3: dcae-sonhms-pg-replica
  container:
    name:
      primary: dcae-sonhms-pg-primary
      replica: dcae-sonhms-pg-replica
  persistence:
    mountSubPath: sonhms/data
    mountInitPath: sonhms
  config:
    pgUserName: sonhms
    pgDatabase: sonhms
    pgUserExternalSecret: *pgUserCredsSecretName

#Pods Service Account
serviceAccount:
  nameOverride: dcae-son-handler
  roles:
    - read
