#  ============LICENSE_START=======================================================
#   Copyright (C) 2022 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=========================================================

#################################################################
# Global configuration defaults.
#################################################################
global:
  persistence: {}
  aafEnabled: false

#################################################################
# Secrets metaconfig
#################################################################
secrets:
  - uid: restserver-secret
    type: basicAuth
    externalSecret: '{{ tpl (default "" .Values.restServer.credsExternalSecret) . }}'
    login: '{{ .Values.restServer.user }}'
    password: '{{ .Values.restServer.password }}'
    passwordPolicy: required
  - uid: keystore-password
    type: password
    externalSecret: '{{ tpl (default "" .Values.certStores.keyStorePasswordExternalSecret) . }}'
    password: '{{ .Values.certStores.keyStorePassword }}'
    passwordPolicy: required
  - uid: truststore-password
    type: password
    externalSecret: '{{ tpl (default "" .Values.certStores.trustStorePasswordExternalSecret) . }}'
    password: '{{ .Values.certStores.trustStorePassword }}'
    passwordPolicy: required
  - uid: policy-kafka-user
    externalSecret: '{{ tpl (default "" .Values.config.jaasConfExternalSecret) . }}'
    type: genericKV
    envs:
      - name: sasl.jaas.config
        value: '{{ .Values.config.someConfig }}'
        policy: generate

certStores:
  keyStorePassword: Pol1cy_0nap
  trustStorePassword: Pol1cy_0nap

#################################################################
# Application configuration defaults.
#################################################################
# application image
image: onap/policy-clamp-ac-a1pms-ppnt:6.4.0
pullPolicy: Always

# application configuration
restServer:
  user: participantUser
  password: zb!XztG34

a1pmsconfig:
  a1pms:
    baseUrl: http://a1policymanagement.onap:8081
    headers:
      content-type: application/json
    endpoints:
      health: /a1-policy/v2/rics
      services: /a1-policy/v2/services
      service: /a1-policy/v2/services/{service_id}

# flag to enable debugging - application support required
debugEnabled: false

# default number of instances
replicaCount: 1

nodeSelector: {}

affinity: {}
ingress:
  enabled: false

# probe configuration parameters
liveness:
  initialDelaySeconds: 20
  periodSeconds: 10
  # necessary to disable liveness probe when setting breakpoints
  # in debugger so K8s doesn't restart unresponsive container
  enabled: true
  port: a1pms-api

readiness:
  initialDelaySeconds: 20
  periodSeconds: 10
  port: a1pms-api

service:
  type: ClusterIP
  name: policy-clamp-ac-a1pms-ppnt
  ports:
    - name: a1pms-api
      port: 8086
      nodePort: 42


flavor: small
resources:
  small:
    limits:
      cpu: 1
      memory: 4Gi
    requests:
      cpu: 100m
      memory: 1Gi
  large:
    limits:
      cpu: 2
      memory: 8Gi
    requests:
      cpu: 200m
      memory: 2Gi
  unlimited: {}
#Pods Service Account
serviceAccount:
  nameOverride: policy-clamp-ac-a1pms-ppnt
  roles:
    - create

config:
# Event consumption (kafka) properties
  useStrimziKafka: true
  kafkaBootstrap: strimzi-kafka-bootstrap
  kafka:
    consumer:
      groupId: policy-group
  app:
    listener:
      acRuntimeTopic: policy-acruntime-participant
# If targeting a custom kafka cluster, ie useStrimziKakfa: false
# uncomment below config and target your kafka bootstrap servers,
# along with any other security config.
#
# eventConsumption:
#   spring.kafka.bootstrap-servers: <kafka-bootstrap>:9092
#   spring.kafka.security.protocol: PLAINTEXT
#   spring.kafka.consumer.group-id: policy-group
#
# 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 instead of yaml.
# additional:
#   spring.config.max-size: 200
#   spring.config.min-size: 10

