How to set multiple values with helm?

痞子三分冷 提交于 2020-06-13 13:53:22

问题


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


回答1:


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}



回答2:


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"



回答3:


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.




回答4:


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

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


来源:https://stackoverflow.com/questions/48316330/how-to-set-multiple-values-with-helm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!