# 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

# 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

replicas:
  cli: ~

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/ofagent-go
    tag: master
# END_OFAGENT_GO
#  ofagent:
#    repository: voltha/voltha-ofagent
#    tag: 2.1.1
#  rw_core:
#    repository: voltha/voltha-rw-core
#    tag: 2.1.1

deployments:
  etcdOperator: true
  backupOperator: true
  restoreOperator: true

voltha-etcd-cluster:
  clusterSize: 3
  autoCompactionRetention: 1

kafka:
  configurationOverrides:
    "default.replication.factor": 3
    "offsets.topic.replication.factor": 3
  replicas: 3

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"

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

# 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
