# Copyright © 2022 Huawei Technologies Co., Ltd. All rights reserved.
#
# 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.

# Default values for uui intent analysis.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

global:
  passwordStrength: long

#Pods Service Account
serviceAccount:
  nameOverride: uui-intent-analysis
  roles:
    - read

secrets:
  - uid: pg-root-pass
    name: &pgRootPassSecretName '{{ include "common.release" . }}-uui-intent-pg-root-pass'
    type: password
    externalSecret: '{{ ternary "" (tpl (default "" .Values.postgres.config.pgRootPasswordExternalSecret) .) (hasSuffix "uui-intent-pg-root-pass" .Values.postgres.config.pgRootPasswordExternalSecret) }}'
    password: '{{ .Values.postgres.config.pgRootpassword }}'
    policy: generate
  - uid: pg-user-creds
    name: &pgUserCredsSecretName '{{ include "common.release" . }}-uui-intent-pg-user-creds'
    type: basicAuth
    externalSecret: '{{ ternary "" (tpl (default "" .Values.postgres.config.pgUserExternalSecret) .) (hasSuffix "uui-intent-pg-user-creds" .Values.postgres.config.pgUserExternalSecret) }}'
    login: '{{ .Values.postgres.config.pgUserName }}'
    password: '{{ .Values.postgres.config.pgUserPassword }}'
    passwordPolicy: generate

image: onap/usecase-ui-intent-analysis:5.2.4
pullPolicy: Always

# flag to enable debugging - application support required
debugEnabled: false
flavor: small
replicaCount: 1
nodeSelector: {}
affinity: {}

service:
  type: ClusterIP
  name: uui-intent-analysis
  ports:
  - name: http-rest
    port: &svc_port 8083

liveness:
  initialDelaySeconds: 120
  port: *svc_port
  periodSeconds: 10
  enabled: true

readiness:
  initialDelaySeconds: 60
  port: *svc_port
  periodSeconds: 10

# application configuration override for postgres
postgres:
  nameOverride: &postgresName uui-intent-postgres
  service:
    name: *postgresName
    name2: uui-intent-pg-primary
    name3: uui-intent-pg-replica
  container:
    name:
      primary: uui-intent-pg-primary
      replica: uui-intent-pg-replica
  config:
    pgUserName: uui
    pgDatabase: uuiintdb
    pgUserExternalSecret: *pgUserCredsSecretName
    pgRootPasswordExternalSecret: *pgRootPassSecretName
  persistence:
    mountSubPath: uui/uuiintent/data
    mountInitPath: uui

readinessCheck:
  wait_for:
    containers:
      - *postgresName

wait_for_job_container:
  containers:
    - '{{ include "common.name" . }}-job'

# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
#
# Example:
# Configure resource requests and limits
# ref: http://kubernetes.io/docs/user-guide/compute-resources/
# Minimum memory for development is 2 CPU cores and 4GB memory
# Minimum memory for production is 4 CPU cores and 8GB memory
resources:
  small:
    limits:
      cpu: "2"
      memory: "1Gi"
    requests:
      cpu: "1"
      memory: "200Mi"
  large:
    limits:
      cpu: "4"
      memory: "2Gi"
    requests:
      cpu: "2"
      memory: "1Gi"
  unlimited: {}

