# Copyright 2020-present Open Networking Foundation
#
# 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"

images:
  onos_config_loader:
    registry: '{{ .Values.global.image_registry }}'
    repository: '{{ .Values.global.image_org }}voltha-ci-tools'
    tag: '{{- if hasKey .Values.global "image_tag" }}{{- if .Values.global.image_tag }}{{ .Values.global.image_tag }}{{- else }}2.3.2-onos-config-loader{{- end }}{{- else }}2.3.2-onos-config-loader{{- end }}'
    pullPolicy: '{{ .Values.global.image_pullPolicy }}'

# components config
onos-classic:
  enabled: true
  replicas: 1
  image:
    pullPolicy: Always
    repository: voltha/voltha-onos
    tag: 4.3.1
  apps:
    - org.onosproject.lldpprovider
    - org.onosproject.openflow-base
    - org.onosproject.gui2
    - org.onosproject.drivers
    - org.onosproject.mcast
    - 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
  atomix:
    replicas: 0
    persistence:
      enabled: false
    java_opts: >
      -Xmx2G
      -XX:-UseContainerSupport

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

radius:
  enabled: true

etcd:
  enabled: true
  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:
      enabled: false
  persistence:
    enabled: false
  statefulset:
    replicaCount: 1
  service:
    port: 2379

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

# onos configuration
# used in the job "onos-config-loader"
onos:
  # NOTE that these values won't change the configuration in the ONOS container, they are only used in the script that loads the config
  username: karaf
  password: karaf
  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"
      }

# 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
