# 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 }}-onos-config-loader{{- 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.4.0
  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
