Disabling subcharts in custom helm chart

3/25/2019

I've created a custom helm chart with elastic-stack as a subchart with following configurations.

# requirements.yaml
dependencies:
  - name: elastic-stack
    version: 1.5.0
    repository: '@stable'
# values.yaml
elastic-stack:
  kibana:
    # at this level enabled is not recognized (does not work)
    # enabled: true

    # configs like env, only work at this level
    env:
      ELASTICSEARCH_URL: http://foo-elasticsearch-client.default.svc.cluster.local:9200
    service:
      externalPort: 80

# enabled only works at root level
elasticsearch:
  enabled: true
kibana:
  enabled: true
logstash:
  enabled: false

What i don't get is why i have to define the enabled tags outside the elasatic-stack: and all other configurations inside?

Is this a normal helm behavior or some misconfiguration in elastic-stack chart?

-- cebor
elastic-stack
kubeconfig
kubernetes
kubernetes-helm

2 Answers

3/25/2019

Helm conditions are evaluated in the top parent's values:

Condition - The condition field holds one or more YAML paths (delimited by commas). If this path exists in the top parent’s values and resolves to a boolean value, the chart will be enabled or disabled based on that boolean value

Take a look at the conditions in requirements.yaml from stable/elastic-stack:

- name: elasticsearch
  version: ^1.17.0
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: elasticsearch.enabled
- name: kibana
  version: ^1.1.0
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: kibana.enabled
- name: logstash
  version: ^1.2.1
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: logstash.enabled

The conditions paths are elasticsearch.enabled, kibana.enabled and logstash.enabled, so you need to use them in your parent chart values.

-- Eduardo Baitello
Source: StackOverflow

3/25/2019

Those properties in parent values.yaml serve as switch for the subcharts.

You are suppose to use condition in your requirements.yaml to control the installation or execution of your dependent subcharts. If not provided then helm simply proceeds to deploy the subchart without and problem.

And also, those values are in parent's values.yaml because they are being used in the parent chart itself and moreover cannot be used inside the subchart unless provided as global or within the subchart's name property key (which is in your case elastic-stack).

-- Vikas Tawniya
Source: StackOverflow