# Copyright © 2018 Amdocs, Bell Canada
#
# 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.

#################################################################
# Global configuration defaults.
#################################################################
global:
  mariadbGalera:
    nameOverride: mariadb-galera
    servicePort: 3306
    # set these two values if you want to access an 'out of ONAP' mariadb
    # userRootPassword: some-password
    # userRootSecret: some-secret-name
    # userRootSecretKey: password

#################################################################
# Secrets metaconfig
#################################################################
secrets:
  - uid: root-password
    type: password
    externalSecret: '{{ tpl (ternary (default "" .Values.mariadbGalera.userRootSecret) (default (include "mariadbInit.mariadbClusterSecret" .) .Values.global.mariadbGalera.userRootSecret) (not (empty (default "" .Values.mariadbGalera.serviceName)))) . }}'
    password: '{{ tpl (ternary (default "" .Values.mariadbGalera.userRootPassword) (default "" .Values.global.mariadbGalera.userRootPassword) (not (empty (default "" .Values.mariadbGalera.serviceName)))) . }}'
  - uid: '{{ .Values.config.mysqlDatabase }}'
    type: basicAuth
    externalSecret: '{{ tpl (default "" .Values.config.userCredentialsExternalSecret) . }}'
    login: '{{ .Values.config.userName }}'
    password: '{{ .Values.config.userPassword }}'
    passwordPolicy: required

#################################################################
# Application configuration defaults.
#################################################################

pullPolicy: IfNotPresent

# These two values are used to supply commands that are run after the DB is created.
# Components using the shared DB can either pass a string which has a set of commands
# or a config map that contains a shell script. If both are specified only the config
# map will be executed. For reference, please see the VID components for config map
dbScript: ""
dbScriptConfigMap: ""

# Set it if you want to change the name of the different components
# nameOverride:

mariadbGalera: {}
#  serviceName: some-name
#  containerName: some-name
#  servicePort: 3306
#  userRootPassword: some-password
#  userRootSecret: some-secret-name
#  userRootSecretKey: password

# These are default settings, required for a chart compilation with "local" cluster
# setting. These values need to be overwritten in the component's values.yaml, e.g.
# global:
#   mariadbGalera: &mariadbGalera
#     #This flag allows SO to instantiate its own mariadb-galera cluster
#     localCluster: true
#     service: nbi-galera
#     internalPort: 3306
#     nameOverride: nbi-galera
# mariadb-init:
#   mariadb-galera:
#     nameOverride: nbi-galera
#     service:
#       internalPort: 3306
mariadb-galera:
  service:
    internalPort: 3306
  nameOverride: mariadb-galera

config:
  userPassword: Ci@shsOd3pky1Vji
  userName: u5WZ1GMSIS1wHZF
  # set this value if you would like to use external secret instead of providing a password
  # userCredentialsExternalsecret: some-secret-name
  mysqlDatabase: ynsaUCru6mUNwGal
  mysqlAdditionalDatabases: {}
  # add addtional dabases
  # this is an dict
  # Example:
  # mysqlAdditionalDatabases:
  #   dbOne:
  #     user: one
  #     password: pwd1
  #     externalSecret: some-secret-name
  #   dbTwo:
  #     user: two
  #     password: pwd2
  #     externalSecret: some-secret-name
  config_map: default

nodeSelector: {}

affinity: {}

#resources: {}
  # 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
flavor: small
resources:
  small:
    limits:
      cpu: 100m
      memory: 500Mi
    requests:
      cpu: 10m
      memory: 10Mi
  large:
    limits:
      cpu: 200m
      memory: 500Mi
    requests:
      cpu: 20m
      memory: 20Mi
  unlimited: {}

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