# Copyright 2020-2023 Open Networking Foundation (ONF) and the ONF Contributors
#
# 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.
---
apiVersion: v2
description: A Helm chart to install the required infrastructure for VOLTHA
keywords:
  - "onf"
  - "voltha"
  - "onos"
  - "radius"
  - "sadis-server"
home: "https://www.opennetworking.org/voltha"
icon: "https://guide.opencord.org/logos/voltha.svg"
maintainers:
  - name: "Open Networking Foundation"
    email: "info@opennetworking.org"
    url: "https://www.opennetworking.org"
name: voltha-infra

# app version is NOT used in this chart for application versions or image tags
# but represents the voltha release version itself
appVersion: "2.12"

## Chart version for package:
##   Increment when Chart.yaml changes
version: "2.12.2"

dependencies:
  - name: onos-classic
    repository: https://charts.onosproject.org
    version: 0.1.29
    condition: onos-classic.enabled
  - name: redis
    repository: https://charts.bitnami.com/bitnami
    version: 17.0.10
    condition: redis.enabled
  - name: bbsim-sadis-server
    repository: file://../bbsim-sadis-server
    version: 0.3.3
    condition: bbsim-sadis-server.enabled
  - name: etcd
    repository: https://charts.bitnami.com/bitnami
    version: 8.5.11
    condition: etcd.enabled
  - name: kafka
    repository: https://charts.bitnami.com/bitnami
    version: 20.0.2
    condition: kafka.enabled
  - name: freeradius
    repository: https://charts.opencord.org
    version: 1.0.2
    condition: radius.enabled
  - name       : voltha-tracing
    repository : file://../voltha-tracing
    version    : "2.12.1"
    condition: voltha-tracing.enabled
  - name: elasticsearch
    repository: https://helm.elastic.co
    version: 7.10.1
    condition: efk.enabled
  - name: kibana
    repository: https://helm.elastic.co
    version: 7.10.1
    condition: efk.enabled
  - name: fluentd-elasticsearch
    repository: https://kiwigrid.github.io
    version: 9.6.2
    # TODO kiwigrid is deprecated, use: https://github.com/kokuwaio/helm-charts/tree/main/charts/fluentd-elasticsearch
    # repository: https://kokuwaio.github.io/helm-charts
    # version: 11.7.1
    condition: efk.enabled
