# 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.

nameOverride: ~
fullNameOverride: ~

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
  endpoints:
    address: '{{ template "fullname" . }}'

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: []

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:
  enabled: true
  fsGroup: 1001
  runAsUser: 1001
  runAsGroup: 1001

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

#Probe
probe:
  liveness:
    initial_delay_seconds: 3
    period_seconds: 3
  readiness:
    initial_delay_seconds: 3
    period_seconds: 3

nodeSelector: {}

tolerations: []

affinity: {}

# Define connectivity to required services
services:
  kafka:
    cluster:
      address: kafka:9092
  kvstore:
    # type: etcd, redis or redis-sentinel
    type: "etcd"
    address: "voltha-infra-etcd-headless.infra.svc.cluster.local"
    port: "2379"

serviceMonitor:
    enable: false
