# 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

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
#  ofagent:
#    repository: voltha/voltha-ofagent
#    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

# 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
