# Copyright 2022-2024 Open Networking Foundation (ONF) and the ONF Contributors
#
# 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 voltha-go-controller.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

replicaCount: 1

global:
  stack_name: voltha
  log_level: "WARN"
  voltha_infra_name: "voltha-infra"
  voltha_infra_namespace: "infra"
  image_registry: ""
  image_tag: ~
  image_org: "voltha/"
  image_pullPolicy: "IfNotPresent"

image:
  repository: nginx
  tag: stable
  pullPolicy: IfNotPresent

voltha_go_controller:
  sshPort: 8101
  uiPort: 8181
  ofPort: 6653
  uiProtocol: TCP

images:
  voltha_go_controller:
    registry: '{{ .Values.global.image_registry }}'
    repository: '{{ .Values.global.image_org }}voltha-go-controller'
    tag: '{{- if hasKey .Values.global "image_tag" }}{{- if .Values.global.image_tag }}{{ .Values.global.image_tag }}{{- else }}{{ .Chart.AppVersion }}{{- end }}{{- else }}{{ .Chart.AppVersion }}{{- end }}'
    pullPolicy: '{{ .Values.global.image_pullPolicy | default "Always" }}'

imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""

serviceAccount:
  # Specifies whether a service account should be created
  create: true
  # The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template
  name:

podSecurityContext: {}
  # fsGroup: 2000

securityContext: {}
  # capabilities:
  #   drop:
  #   - ALL
  # readOnlyRootFilesystem: true
  # runAsNonRoot: true
  # runAsUser: 1000

service:
  type: ClusterIP
  port: 80

ingress:
  enabled: false
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: chart-example.local
      paths: []

  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local

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:'.
  # limits:
  #   cpu: 100m
  #   memory: 128Mi
  # requests:
  #   cpu: 100m
  #   memory: 128Mi

nodeSelector: {}

tolerations: []

affinity: {}

# Define connectivity to required services
services:
  kafka:
    cluster:
      address: kafka:9092
  kvstore:
    # type: etcd, redis or redis-sentinel
    type: "redis"
    address: "voltha-infra-redis-headless.{{ .Values.global.voltha_infra_namespace }}.svc.cluster.local"
    port: "6379"
