Передача строки, содержащей фигурные скобки, helm вызвана: Ошибка: не удалось выполнить синтаксический анализ --set data: key - PullRequest
0 голосов
/ 22 января 2020

${CLIENT_ID} и ${CLIENT_SECRET} оба получены из файла свойств на основе yaml, например,

CLIENT_ID: 11111111-1111-1111-1111-111111111111
CLIENT_SECRET: '{aes}AM+JYP8t9ga1m6s111x1fjdfePL10v90RmbgWFdOjVdD/wlnszAbJad8aOI4qqMv6eSGaW2nfTF4PG2OYH+rx9K052TXNP6PGAAcRph9pl11'

с использованием:

PROPERTIES_FILE="properties.yaml"
CLIENT_ID=$(yq r "${PROPERTIES_FILE}" CLIENT_ID)
CLIENT_SECRET=$(yq r "${PROPERTIES_FILE}" CLIENT_SECRET)

, а затем переданы в мою команду helm для Развертывание моего приложения:


echo ${CLIENT_ID}
# 11111111-1111-1111-1111-111111111111
echo ${CLIENT_SECRET}
# {aes}AM+JYP8t9ga1m6s111x1fjdfePL10v90RmbgWFdOjVdD/wlnszAbJad8aOI4qqMv6eSGaW2nfTF4PG2OYH+rx9K052TXNP6PGAAcRph9pl11

helm upgrade -i --debug  --namespace mynamespace release \
-f "charts/app/values.yaml" \
--set "app.configmap.dependancy.client_id=${CLIENT_ID}" \
--set "app.configmap.dependancy.client_secret=${CLIENT_SECRET}" \
"charts/app/"

charts/app/values.yaml содержит:

app:
  ..
  configmap:
    dependancy:
      client_id: ""
      client_secret: ""

Проблема в том, что я получаю эту ошибку при выполнении команды helm:

Error: failed parsing --set-string data: key "AM+JYP8t9ga1m6s111x1fjdfePL10v90RmbgWFdOjVdD/wlnszAbJad8aOI4qqMv6eSGaW2nfTF4PG2OYH+rx9K052TXNP6PGAAcRph9pl11" has no value
No resources found.

Есть идеи, почему префикс {aes} вызывает проблемы при передаче в helm, как это? Команда работает, если я удаляю префикс {aes}.

1 Ответ

1 голос
/ 23 января 2020

Хелм пытается сделать возможным передачу некоторых структурированных данных с использованием --set, и это вас здесь сбивает с толку. В частности,

Списки можно выразить, заключив значения в { и }. Например, --set name={a, b, c} преобразуется в [список a, b и c].

Так что если вы --set 'key={aes}AM+JYP8...', часть {aes} выглядит так Синтаксис списка, но после него есть вещи, которые Хельм не понимает.

Вы можете backsla sh - убрать фигурные скобки, хотя это немного сложно сделать в синтаксисе оболочки. Существует опция --set-string (задокументированная в документации Helm 2 , но все еще присутствующая в Helm 3), которая может сделать это. Возможно, самый простой путь - записать свой собственный файл значений YAML:

#!/bin/sh
PROPERTIES_FILE="properties.yaml"
CLIENT_ID=$(yq r "${PROPERTIES_FILE}" CLIENT_ID)
CLIENT_SECRET=$(yq r "${PROPERTIES_FILE}" CLIENT_SECRET)

cat >values.tmp.yaml <<EOF
app:
  configmap:
    dependancy:
      client_id: "${CLIENT_ID}"
      client_secret: "${CLIENT_SECRET}"
EOF

helm upgrade -i --debug --namespace mynamespace release \
  -f values.tmp.yaml charts/app

(При необходимости вы можете иметь несколько опций helm install -f. values.yaml диаграммы читается в автоматически и переопределяется параметрами командной строки.)

...