How to set multiple values with helm?

1/18/2018

Use helm install can set value when install a chart like:

helm install --set favoriteDrink=slurm ./mychart

Now want to set value like:

helm install --set aws.subnets="subnet-123456, subnet-654321" ./mychart

But failed:

Error: failed parsing --set data: key " subnet-654321" has no value

It seems that helm's --set know comma , and check the next string as a key. So can't use in this case when set such string?


Tested this way

helm install charts/mychart \
    --set aws.subnets={subnet-123456,subnet-654321}

Got error:

Error: This command needs 1 argument: chart name

This way works

helm install charts/mychart \
    --set aws.subnets="subnet-123456\,subnet-654321"

Reference

https://github.com/kubernetes/helm/blob/master/docs/using_helm.md#the-format-and-limitations-of---set

-- online
command-line-interface
kubernetes
kubernetes-helm
shell
string

4 Answers

9/18/2019

Regarding this comment How to set multiple values with helm? I used quotes and this worked:

--set aws.subnets="{subnet-123456,subnet-654321}"
-- acca
Source: StackOverflow

1/18/2018

According to https://github.com/kubernetes/helm/issues/1987#issuecomment-280497496, you set multiple values using curly braces, for example:

--set foo={a,b,c}

So, in your case it would be like this

--set aws.subnets={subnet-123456,subnet-654321}
-- Javier Salmeron
Source: StackOverflow

4/12/2019

The CLI format and limitations can vary depending on what would be expected in a YAML version. For example, if the YAML manifest requires fields to be populated with a list of values the YAML would look like this:

field:
  - value1
  - value2
  - value3 

This would be expressed in the helm CLI like so

--set field[0]=value1 --set field[1]=value2 --set field[2]=value3

The documentation also refers to --set field={value1,value2,value3} working. In some cases that results in Error: This command needs 1 argument: chart name which is why I provide the above suggestion

There are also limitations to what characters may be used per the documentation:

You can use a backslash to escape the characters; --set name="value1\,value2" will become:

name: "value1,value2"
-- Marc
Source: StackOverflow

12/16/2019

With this change being merged, Helm now supports using multiple --set command with helm install command.

Taking from the link mentioned above:

Manually tested, and looks awesome!

⇒  helm install --dry-run --debug docs/examples/alpine \
  --set foo=bar \
  --set bar=baz,baz=lurman \
  --set foo=banana

SERVER: "local4host:44134"
CHART PATH: /Users/mattbutcher/Code/Go/src/k8s.io/helm/docs/examples/alpine
NAME:   masked-monkey
REVISION: 1
RELEASED: Thu Jan 12 17:09:07 2017
CHART: alpine-0.1.0
USER-SUPPLIED VALUES:
bar: baz
baz: lurman
foo: banana

COMPUTED VALUES:
Name: my-alpine
bar: baz
baz: lurman
foo: banana
...

As expected, the last --set overrode the first --set.

P.S: Upgrade your Helm version in case this doesn't work for you. It worked perfectly for me with Helm-v3.0.1.

-- Amit Yadav
Source: StackOverflow