# 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 use the new Go implementation. This is done by
# setting that value to `true`. Along with this change you will also need
# to set the Docker image information below (search for START_OFAGENT_GO).
use_ofagent_go: false

ofagent:
  log_level: debug

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: master
#  adapter_simulated_onu:
#    repository: voltha/voltha-adapter-simulated-onu
#    tag: master
#  bbsim:
#    repository: voltha/bbsim
#    tag: master
#  afrouter:
#    repository: voltha/voltha-afrouter
#    tag: master
#  afrouterd:
#    repository: voltha/voltha-afrouterd
#    tag: master
#  cli:
#    repository: voltha/voltha-cli
#    tag: 2.1.1
# START_OFAGENT_GO - Uncomment the following block to use the Go implementation
# of the ofagent
#  ofagent:
#    repository: volta/ofagent-go
#    tag: master
# END_OFAGENT_GO
#  ofagent:
#    repository: volta/voltha-ofagent-go
#    tag: 2.1.1
#  ro_core:
#    repository: voltha/voltha-ro-core
#    tag: 2.1.1
#  rw_core:
#    repository: voltha/voltha-rw-core
#    tag: 2.1.1

deployments:
  etcdOperator: true
  backupOperator: false
  restoreOperator: false

voltha-etcd-cluster:
  clusterSize: 1
  autoCompactionRetention: 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"

# Customization for BBSIM
kafka_broker: 'voltha-kafka.voltha.svc.cluster.local:9092'
pon_ports: 1
onus_per_pon_port: 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
#
#ro_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
#
#ro_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
