Как установить несколько значений с помощью helm?

Использовать helm install можно установить значение при установке диаграммы, например:

helm install --set favoriteDrink=slurm ./mychart

Теперь хочу установить такое значение, как:

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

Но не удалось:

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

Кажется, что --set helm знает запятую , и проверяет следующую строку как ключ. Значит, нельзя использовать в этом случае при установке такой строки?


Протестировано таким образом

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

Получил ошибку:

Error: This command needs 1 argument: chart name

Так работает

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

Ссылка

https://helm.sh/docs/intro/using_helm/#the-format-and-limitations-of---set


person online    schedule 18.01.2018    source источник
comment
Ссылка сейчас 404   -  person Neil    schedule 21.12.2020


Ответы (4)


Согласно https://github.com/kubernetes/helm/issues/1987#issuecomment-280497496, вы задаете несколько значений с помощью фигурных скобок, например:

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

Итак, в вашем случае это будет так

--set aws.subnets={subnet-123456,subnet-654321}
person Javier Salmeron    schedule 18.01.2018
comment
Спасибо за ваш ответ. У меня это не работает. Результат выложил на вопрос. А также добавил правильный путь. - person online; 18.01.2018

Формат и ограничения CLI могут различаться в зависимости от того, что ожидается от версии YAML. Например, если манифест YAML требует, чтобы fields был заполнен списком значений, YAML будет выглядеть так:

field:
  - value1
  - value2
  - value3 

Это будет выражено в CLI руля следующим образом

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

В документации также говорится о --set field={value1,value2,value3} работе. В некоторых случаях это приводит к Error: This command needs 1 argument: chart name, поэтому я предлагаю вышеуказанное предложение

Также существуют ограничения на использование символов согласно документации:

Для экранирования символов можно использовать обратную косую черту; --set name="value1\,value2" станет:

name: "value1,value2"
person Marc    schedule 12.04.2019
comment
К сожалению, в Helm 2.13.1 это не работает: helm install deploy/traefik/chart --set externalIps[0]="a" --set externalIps[1]="b" --debug --dry-run возвращает zsh: no matches found: externalIps[0]=a - person David Fernandez; 03.12.2019
comment
А как насчет того, чтобы элементы вашего списка не были одним значением, а набором значений, например В списке входных путей есть путь и серверная часть с serviceName и servicePort. Как я могу это сделать и передать полную таблицу пар "ключ-значение" или просто установить одно значение, а остальные оставить? - person Kajsa; 21.05.2020

После объединения этого изменения Helm теперь поддерживает использование нескольких команд --set с командой helm install.

Взяв по ссылке, указанной выше:

Проверено вручную, выглядит потрясающе!

⇒  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
...

Как и ожидалось, последний --set перекрыл первый --set.

P.S: Обновите версию Helm, если это не сработает для вас. У меня он отлично работал с Helm-v3.0.1.

person Amit Yadav    schedule 16.12.2019

Относительно этого комментария Как установить несколько значений с помощью helm? Я использовал кавычки, и это сработало:

--set aws.subnets="{subnet-123456,subnet-654321}"
person acca    schedule 18.09.2019
comment
У меня это не работает, я получаю странное spec: [a b c], когда делаю helm install deploy/traefik/chart --set externalIps="{a,b,c}" --debug --dry-run - person David Fernandez; 03.12.2019