32

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>

2 Answers 2

40

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
Sign up to request clarification or add additional context in comments.

Comments

18

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

2 Comments

Showing how to escape the dot with the backslash saved me some time. Thanks, Daniel.
It saved me as well with nodeSelector setup name: prometheusOperator.nodeSelector\.super.cash-worker_group-name, value: monitoring

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.