---
# Copyright 2017-present Open Networking Foundation
#
# 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.

replicas:
  vcore: 1
  vcli: 1
  ofagent: 1
  netconf: 1
  envoy_for_etcd: 1
  alarm_generator: 1

node_ports:
  vcli_port: 30110

services:
  envoy:
    serviceType: NodePort
    serviceInfo:
      ports:
        - name: rest
          port: 8882
          targetPort: 8882
          nodePort: 30125
        - name: mystery
          port: 8001
          targetPort: 8001
        - name: mystery2
          port: 8443
          targetPort: 8443
          nodePort: 32443
        - name: grpc
          port: 50555
          targetPort: 50555

etcd:
  cluster:
    enabled: true

freeradius:
  enabled: true

kafkaReleaseName: cord-kafka
etcdReleaseName: etcd-cluster


loglevel: "DEBUG"

images:
  vcore:
    repository: 'voltha/voltha-voltha'
    tag: '{{ .Chart.AppVersion }}'
    pullPolicy: 'Always'

  vcli:
    repository: 'voltha/voltha-cli'
    tag: '{{ .Chart.AppVersion }}'
    pullPolicy: 'Always'

  ofagent:
    repository: 'voltha/voltha-ofagent'
    tag: '{{ .Chart.AppVersion }}'
    pullPolicy: 'Always'

  netconf:
    repository: 'voltha/voltha-netconf'
    tag: '{{ .Chart.AppVersion }}'
    pullPolicy: 'Always'

  envoy_for_etcd:
    repository: 'voltha/voltha-envoy'
    tag: '{{ .Chart.AppVersion }}'
    pullPolicy: 'Always'

  alarm_generator:
    repository: 'voltha/voltha-alarm-generator'
    tag: '{{ .Chart.AppVersion }}'
    pullPolicy: 'Always'

  freeradius:
    repository: 'tpdock/freeradius'
    tag: '2.2.9'
    pullPolicy: 'Always'

  http_backend:
    repository: 'gcr.io/google_containers/defaultbackend'
    tag: '1.4'
    pullPolicy: 'Always'

  ingress_controller:
    repository: 'quay.io/kubernetes-ingress-controller/nginx-ingress-controller'
    tag: '0.10.2'
    pullPolicy: 'Always'


# Need the namespace global for kafka
global:
  namespace: voltha
  registry: ''

vcli_args:
- "/cli/cli/setup.sh"
- "-C consul:8500"
- "-g voltha:50555"
- "-s voltha:18880"
- "-G"

ofagent_args:
- "/ofagent/ofagent/main.py"
- "--consul=consul.$(NAMESPACE).svc.cluster.local:8500"
- "--controller=onos-openflow.default.svc.cluster.local:6653"
- "--grpc-endpoint=vcore.$(NAMESPACE).svc.cluster.local:50556"

netconf_args:
- "/netconf/netconf/main.py"
- "--consul=consul:8500"
- "--grpc-endpoint=voltha:50555"

# set alarm_generator_enable to true to enable alarm generator container.
# uncomment the intf_id and onu_id arguments if no olt is physically present, and a fake onu_id should be used.

alarm_generator_enable: false
alarm_generator_args:
- "--consul=consul:8500"
- "--grpc-endpoint=voltha:50555"
- "--global_request"
- "--rate=1"
- "--duration=2"
#- "--intf_id=0"
#- "--onu_id=00012bc90d6552dd"
