# 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: 5.0.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
  atomix:
    replicas: 0
    persistence:
      enabled: false
    java_opts: >
      -Xmx2G
      -XX:-UseContainerSupport

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 * * * *"

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

# 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
