# 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: voltha-2.1

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: voltha-2.1

# 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/voltha-bbsim
    tag: voltha-2.1
  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
