Helm не может передать двойные кавычки в values.yaml из командной строки?

У меня есть диаграмма Helm с values.yaml, содержащая:

# Elided
tolerations: []

Я пытаюсь передать допуски через командную строку, но она всегда удаляет кавычки (или добавляет двойные кавычки внутри одинарных), несмотря на все попытки ниже. В результате он не работает при установке, говоря, что ожидал строку.

# Attempt 0
helm install traefik traefik/traefik --set tolerations[0].key=CriticalAddonsOnly --set tolerations[0].value = "true" --set tolerations[0].operator=Equal --set tolerations[0].effect=NoExecute

# Attempt 1
helm install traefik traefik/traefik --set tolerations[0].key=CriticalAddonsOnly --set "tolerations[0].value = "true"" --set tolerations[0].operator=Equal --set tolerations[0].effect=NoExecute

# Attempt 2
helm install traefik traefik/traefik --set tolerations[0].key=CriticalAddonsOnly --set "tolerations[0].value=\"true\"" --set tolerations[0].operator=Equal --set tolerations[0].effect=NoExecute

# Attempt 3
helm install traefik traefik/traefik --set tolerations[0].key=CriticalAddonsOnly --set tolerations[0].value = "\"true\"" --set tolerations[0].operator=Equal --set tolerations[0].effect=NoExecute

# Attempt 4
helm install traefik traefik/traefik --set tolerations[0].key=CriticalAddonsOnly --set tolerations[0].value='"true"' --set tolerations[0].operator=Equal --set tolerations[0].effect=NoExecute

Все они в конечном итоге создают yaml с value: true или value: '"true"', ни один из которых не будет установлен.

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
2
0
2 676
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, есть два ответа: исключительно подробный, который вы пытаетесь решить, или более краткий, который не вызывает вопросов о переполнении стека для будущих читателей:

Helm предлагает --set-string, которая является версией --set без интерполяции.

helm install traefik traefik/traefik \
    --set tolerations[0].key=CriticalAddonsOnly \
    --set-string tolerations[0].value=true \
    --set tolerations[0].operator=Equal \
    --set tolerations[0].effect=NoExecute

Однако, как вы поняли, этот синтаксис --set предназначен только для самых простых случаев, для более сложных случаев --values является правильным механизмом. Вы можете прочитать их из стандартного ввода, если создать временный файл yaml слишком сложно.

printf 'tolerations: [{key: CriticalAddonsOnly, value: "true", operator: Equal, effect: NoExecute}]\n' | \
  helm install traefik traefik/traefik --values /dev/stdin

Спасибо, это именно то, что я искал! В документации Helm было нелегко найти этот ответ.

Don Rhummy 22.12.2020 23:45

Другие вопросы по теме