# Copyright 2020-2023 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.1
  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:
    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
