---
# Copyright 2019 Ciena Corporation
#
# 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.

# IMAGE SELECTION
# ---------------
# By default no defaults are set and the image tags specified in the helm
# charts will be used. If you would like to use the images generated from the
# HEAD of the "master" git branches, then uncomment this below block and
# set "<VALUE>" to "master". Similarly, if you want to use the images
# generated from the HEAD of the "voltha-2.1" git branches, then uncomment
# this block and replace "<VALUE>" with "voltha-2.1".
defaults:
  image_tag: master

private_etcd_cluster: false
private_kafka_cluster: false

# OFAGENT IMPLEMENTATION
# ----------------------
# There are currently two implementations of OFAGENT: the original written in
# Python and the reimplementation written in Go. The variable `use_ofagent_go`
# can be used to optionally select the implementation. The Go version is the
# version to be part of the official release and is the default. The Python
# verison has been deprecated and is no longer being actively workes, but is
# being left as an option for this release.
#
# Along with this change you will also may need to set the Docker image
# information below (search for START_OFAGENT_GO).
use_ofagent_go: true

images:
  onos:
    repository: voltha/voltha-onos
    # IMAGE_SELECTION
    # ---------------
    # The helm chart used to deploy ONOS is the public ONOS helm chart so,
    # there is a need to specify the exact image repository and image tag.
    # If you would like to use the "master", "voltha-2.1", or other image
    # just replace the "tag" value below.
    tag: master

# IMAGE_SELECTION
# ---------------
# Below are a list of all the images utilized by kind-voltha. This list is
# provided as a conveinence if you would like to override on a per image
# basis. If you are using the defaults, master, or voltha-2.1 branch there
# is no need to utilize this list.
#  adapter_open_olt:
#    repository: voltha/voltha-openolt-adapter
#    tag: 2.1.1
#  adapter_open_onu:
#    repository: voltha/voltha-openonu-adapter
#    tag: 2.1.0
#  adapter_simulated_olt:
#    repository: voltha/voltha-adapter-simulated-olt
#    tag: 2.1.1
#  adapter_simulated_onu:
#    repository: voltha/voltha-adapter-simulated-onu
#    tag: 2.1.1
#  bbsim:
#    repository: voltha/bbsim
#    tag: master
# START_OFAGENT_GO - Comment the following block to use the
# Python implementation of the ofagent
#  ofagent:
#    repository: voltha/voltha-ofagent-go
#    tag: master
# END_OFAGENT_GO
#  ofagent:
#    repository: voltha/voltha-ofagent-py
#    tag: 2.1.1
#  rw_core:
#    repository: voltha/voltha-rw-core
#    tag: 2.1.1

etcd:
  replicas: 3
  extraEnv:
    - name: ETCD_AUTO_COMPACTION_RETENTION
      value: "1"
    - name: ETCD_SNAPSHOT_COUNT
      value: "100000"
    - name: ETCD_HEARTBEAT_INTERVAL
      value: "100"
    - name: ETCD_ELECTION_TIMEOUT
      value: "1000"
    - name: ETCD_MAX_SNAPSHOTS
      value: "5"
    - name: ETCD_QUOTA_BACKEND_BYTES
      value: "0"
    - name: ETCD_MAX_REQUEST_BYTES
      value: "1572864"
    - name: ETCD_GRPC_KEEPALIVE_MIN_TIME
      value: "5s"
    - name: ETCD_GRPC_KEEPALIVE_TIMEOUT
      value: "5s"
    - name: ETCD_DEBUG
      value: "false"

kafka:
  zookeeper:
    replicaCount: 3
    persistence:
      enabled: false
  replicas: 3
  persistence:
    enabled: false
  envOverrides:
    KAFKA_LOG4J_ROOT_LOGLEVEL: ERROR
    KAFKA_TOOLS_LOG4J_LOGLEVEL: ERROR
    # yamllint disable-line rule:line-length
    KAFKA_LOG4J.LOGGERS: "kafka.zookeeper=ERROR,state.change.logger=ERROR,kafka=ERROR,kafka.controller=ERROR"
    KAFKA_LOG_RETENTION_HOURS: 1
    KAFKA_DEFAULT_REPLICATION_FACTOR: 1
    KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

onos_env:
  - name: POD_IP
    valueFrom:
    fieldRef:
      fieldPath: status.podIP
  - name: NAMESPACE
    valueFrom:
    fieldRef:
      fieldPath: metadata.namespace
  - name: ONOS_APPS
    value: "drivers,openflow-base,hostprovider"

# No persistent volume in Atomix to have clean state for each re-deploy of ONOS
atomix:
  persistence:
    enabled: false

# Customization for BBSIM
kafka_broker: 'voltha-kafka.voltha.svc.cluster.local:9092'
pon: 1
onu: 1

# SHOCK THE MONKEY OR LET LOSE THE DOGS OF WAR
# The VOLTHA charts have support for adding extra labels to deployments and
# pods. These extra labels can be used to integrate with other utilities
# such as kube-monkey to add a bit of chaos to the cluster. Below are some
# settings that can be uncommented to opt-in VOLTHA deployments/pods to
# kube-monkey. For example, if you want ALL deployments and pods to opt-in
# then uncomment the `extra_deployment_labels` and `extra_pod_label` blocks.
# If you want to be more selected then comment the blocks that pertain to the
# targets you care about.

# extra_deployment_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
#
# extra_pod_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
#
# rw_core_deployment_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
#
# rw_core_pod_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
#
# ofagent_deployment_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
#
# ofagent_pod_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
#
# openolt_deployment_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
#
# openolt_pod_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
#
# openonu_deployment_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
#
# openonu_pod_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
#
# simolt_deployment_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
#
# simolt_pod_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
#
# simonu_deployment_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
#
# simonu_pod_labels:
#   kube-monkey/enabled: enabled
#   kube-monkey/identifier: monkey-victim
#   kube-monkey/mtbf: 1
#   kube-monkey/kill-mode: fixed
#   kube-monkey/kill-value: 1
