28

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>
Community
  • 1
  • 1
Cory Klein
  • 51,188
  • 43
  • 183
  • 243

2 Answers2

34

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
sky91
  • 3,060
  • 2
  • 19
  • 26
adebasi
  • 3,535
  • 2
  • 19
  • 33
16

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
  • 186
  • 1
  • 3
  • 5
    Showing how to escape the dot with the backslash saved me some time. Thanks, Daniel. – Guido Jul 29 '20 at 16:21
  • It saved me as well with nodeSelector setup `name: prometheusOperator.nodeSelector\.super.cash-worker_group-name`, `value: monitoring` – Marcello DeSales Apr 24 '22 at 03:17