# Copyright © 2018  AT&T Intellectual Property.  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.

#################################################################
# Global configuration defaults.
#################################################################
global:
  nodePortPrefix: 302
  readinessRepository: oomk8s
  readinessImage: readiness-check:2.0.0
  loggingRepository: docker.elastic.co
  loggingImage: beats/filebeat:5.5.0

#################################################################
# Application configuration defaults.
#################################################################
pullPolicy: Always

# application images
repository: nexus3.onap.org:10001

image: onap/dmaap/buscontroller:1.0.12


# application configuration
dmaapMessageRouterService: message-router
aafURL: https://aaf-authz/
topicMgrUser: m23456@dmaapbc.onap.org
topicMgrPwd: onapdemo
adminUser: m12345@dmaapbc.onap.org
adminPwd: onapdemo

nodeSelector: {}

affinity: {}

# probe configuration parameters
liveness:
  initialDelaySeconds: 10
  periodSeconds: 10
  # necessary to disable liveness probe when setting breakpoints
  # in debugger so K8s doesn't restart unresponsive container
  enabled: false

readiness:
  initialDelaySeconds: 10
  periodSeconds: 10


service:
  type: NodePort
  name: dmaap-bc
  portName: dmaap-bc
  portName2: dmaap-bc
  externalPort: 8080
  internalPort: 8080
  externalPort2: 8443
  internalPort2: 8443
  nodePort: 41
  nodePort2: 42


# application configuration override for postgres
postgres:
  nameOverride: dbc-pg
  service:
    name: dbc-postgres
    name2: dbc-pg-primary
    name3: dbc-pg-replica
  container:
    name:
      primary: dbc-pg-primary
      replica: dbc-pg-replica
  config:
    pgUserName: dmaap_admin
    pgDatabase: dmaap
    pgPrimaryPassword: onapdemodb
    pgUserPassword: onapdemodb
    pgRootPassword: onapdemodb
  persistence:
    mountSubPath: dbc/data
    mountInitPath: dbc

ingress:
  enabled: false

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
#resources:
#  limits:
#    cpu: 2
#    memory: 4Gi
#  requests:
#    cpu: 2
#    memory: 4Gi
