# Copyright 2020-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-infra.
# This is a YAML-formatted file.

global:
  image_registry: ''
  image_org: "voltha/"
  image_tag: ~
  image_pullPolicy: "Always"

# components config
onos-classic:
  enabled: true
  replicas: 1
  image:
    pullPolicy: Always
    repository: voltha/voltha-onos
    tag: 5.1.8
  apps:
    - org.onosproject.lldpprovider
    - org.onosproject.openflow-base
    - org.onosproject.gui2
    - org.onosproject.drivers
    - org.onosproject.mcast
    - org.onosproject.segmentrouting
    - org.opencord.kafka
    - org.opencord.sadis
    - org.opencord.dhcpl2relay
    - org.opencord.igmpproxy
    - org.opencord.mcast
    - org.opencord.olt
    - org.opencord.aaa
  java_opts: >
    -XX:+UseG1GC
    -XX:MaxGCPauseMillis=200
    -XX:-UseContainerSupport
    -Dkaraf.log.console=INFO
    -Dds.lock.timeout.milliseconds=10000
    -Dlog4j2.formatMsgNoLookups=true
  atomix:
    podDisruptionBudget:
      enabled: false
    replicas: 0
    persistence:
      enabled: false
    java_opts: >
      -Xmx2G
      -XX:-UseContainerSupport
  config:
    enabled: true
    reconcile_mode: false
    netcfg: >
      {
        "apps" : {
          "org.opencord.dhcpl2relay" : {
            "dhcpl2relay" : {
              "useOltUplinkForServerPktInOut" : true
            }
          },
          "org.opencord.kafka": {
            "kafka" : {
              "bootstrapServers" : "{{ .Release.Name }}-kafka.{{ .Release.Namespace }}.svc:9092"
            }
          },
          "org.opencord.aaa" : {
            "AAA": {
              "radiusConnectionType" : "socket",
              "radiusHost": "{{ .Release.Name }}-freeradius.{{ .Release.Namespace }}.svc",
              "radiusServerPort": "1812",
              "radiusSecret": "SECRET"
            }
          },
          "org.opencord.sadis": {
            "sadis": {
              "integration": {
                "url": "http://bbsim-sadis-server.{{ .Release.Namespace }}.svc:58080/subscribers/%s",
                "cache": {
                  "enabled": true,
                  "maxsize": 50,
                  "ttl": "PT1m"
                }
              }
            },
            "bandwidthprofile": {
              "integration": {
                "url": "http://bbsim-sadis-server.{{ .Release.Namespace }}.svc:58080/profiles/%s",
                "cache": {
                  "enabled": true,
                  "maxsize": 50,
                  "ttl": "PT1m"
                }
              }
            }
          }
        }
      }
    componentConfig:
      "org.opencord.olt.impl.OltFlowService": >
        {
          "enableDhcpOnNni": "true",
          "defaultTechProfileId": "64",
          "enableIgmpOnNni": "false",
          "enableEapol": "true",
          "enableDhcpV6": "false",
          "enableDhcpV4": "true"
        }
      "org.onosproject.provider.lldp.impl.LldpLinkProvider": >
        {
          "enabled": "false"
        }
      "org.onosproject.net.flow.impl.FlowRuleManager": >
        {
          "purgeOnDisconnection": "false"
        }
      "org.onosproject.net.meter.impl.MeterManager": >
        {
          "purgeOnDisconnection": "false"
        }
      "org.onosproject.net.group.impl.GroupManager": >
        {
          "purgeOnDisconnection": "false"
        }
      "org.onosproject.net.device.impl.DeviceManager": >
        {
          "roleTimeoutSeconds": "120"
        }

bbsim-sadis-server:
  enabled: true
  replicas: 1

radius:
  enabled: true

etcd:
  enabled: true

  # ETCD defrag creates a CronJob that runs "etcdctl defrag --cluster"
  # on a defined schedule
  defrag:
    enabled: false
    schedule: "*/5 * * * *"
    image:
      registry: '{{ .Values.global.image_registry }}'
      repository: 'opennetworking/utils'
      tag: 0.2.0
      pullPolicy: 'IfNotPresent'

  ingress:
    enabled: false
    annotations:
      kubernetes.io/ingress.class: "nginx"
      nginx.ingress.kubernetes.io/ssl-redirect: "true"
      nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
      nginx.ingress.kubernetes.io/grpc-backend: "true"
    enableVirtualHosts: false
    hosts:
      - host:
        paths:
          - "/etcdserverpb.KV/"
  auth:
    rbac:
      create: false
  persistence:
    enabled: false
  statefulset:
    replicaCount: 1
  service:
    port: 2379
  autoCompactionMode: "revision"
  autoCompactionRetention: 1
  extraEnvVars:
    - name: ETCD_ELECTION_TIMEOUT
      value: "5000"
    - name: ETCD_HEARTBEAT_INTERVAL
      value: "1000"

kafka:
  enabled: true
  replicaCount: 1
  persistence:
    enabled: false
  zookeeper:
    replicaCount: 1
    persistence:
      enabled: false
  service:
    port: 9092

voltha-tracing:
  enabled: false
  tracing:
    maxTraces: 500000

efk:
  enabled: false

# START EFK Setup to push voltha logs
# elasticstack config
# ref: https://github.com/elastic/helm-charts/tree/7.7.0/elasticsearch
elasticsearch:
  replicas: 1
  minimumMasterNodes: 1
  # set cpu and memory configuration
  resources:
    requests:
      cpu: "400m"
      memory: "1Gi"
    limits:
      cpu: "1000m"
      memory: "2Gi"
  # setup persistence volume.By default persistence volumeclaim is disabled
  volumeClaimTemplate:
    accessModes: ["ReadWriteOnce"]
    resources:
      requests:
        storage: 5Gi
  persistence:
    enabled: false
  # setup cluster health status as yellow
  clusterHealthCheckParams: "wait_for_status=yellow&timeout=1s"

# kibana config
# ref: https://github.com/elastic/helm-charts/tree/7.7.0/kibana
kibana:
  elasticsearchHosts: "http://elasticsearch-master:9200"

# fluentd-elasticsearch config
# ref: https://github.com/kiwigrid/helm-charts/tree/master/charts/fluentd-elasticsearch
fluentd-elasticsearch:
  elasticsearch:
    # set elasticsearch host
    hosts: ["elasticsearch-master:9200"]
    sslVerify: false

redis:
  enabled: false
  auth:
    enabled: false
  volumePermissions:
    enabled: true
  networkPolicy:
    enabled: false
  replica:
    replicaCount: 1
  sentinel:
    enabled: true
    masterSet: sebaRedis
  commonConfiguration: |-
    # The filename where to dump the DB
    dbfilename dump.rdb
