online
online

Reputation: 5507

How to set multiple values with helm?

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://helm.sh/docs/intro/using_helm/#the-format-and-limitations-of---set

Upvotes: 38

Views: 119151

Answers (5)

Matt Gencer
Matt Gencer

Reputation: 11

As previously mentioned, if you're trying to set a list you can use:

--set aws.subnets="{subnet-123456,subnet-654321}"

be careful not to put any space between items. And check the type you're trying to set and make sure you're using the correct format.

You can also use:

--set-json='aws.subnets=["subnet-123456", "subnet-654321"]'

More information and examples can be found here: https://helm.sh/docs/helm/helm_install/#options

Upvotes: 1

Amit Yadav
Amit Yadav

Reputation: 4994

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: "localhost: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.

Upvotes: 10

acca
acca

Reputation: 71

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

--set aws.subnets="{subnet-123456,subnet-654321}"

Upvotes: 4

Marc
Marc

Reputation: 5508

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"

Upvotes: 16

Javier Salmeron
Javier Salmeron

Reputation: 8827

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}

Upvotes: 21

Related Questions