Setting nested data structures from helm command line?

10/5/2018

I'm installing the prometheus-redis-exporter Helm chart. Its Deployment object has a way to inject annotations:

# deployment.yaml
...
  template:
    metadata:
      annotations:
{{ toYaml .Values.annotations | indent 8 }}

Typically if I was providing a values file, I could just do this:

# values.yaml
annotations:
  foo: bar
  bash: baz

And then install the chart with:

helm install --values values.yaml

However, in some cases it is more simple for me to specify these values on the command line with --set instead, I'm just not sure how I would specify a nested set like that.

How can I set the above annotations object when installing a helm chart on the commandline:

helm install --set <what_goes_here>
-- Cory Klein
kubernetes-helm

2 Answers

10/8/2018

The helm docu has a section The Format and Limitations of --set, which contains what you are looking for.

--set outer.inner=value results in:

outer:
  inner: value

Therefore your whole helm command looks like this:

helm install --set annotations.foo=bar,annotations.bash=baz stable/prometheus-redis-exporter
-- adebasi
Source: StackOverflow

5/12/2020

Just to add, if you are looking to override a key with a "." in the key name, add a back slash ("\") before the ".".

for example, with values (taken from grafana):

grafana.ini:
  server:
    root_url: https://my.example.com

To edit the root_url value we would pass --set grafana\.ini.server.root_url=https://your.example.com

-- Daniel Reisel
Source: StackOverflow