Passing a string containing curly brackets to helm caused: Error: failed parsing --set data: key
Passing a string containing curly brackets to helm caused: Error: failed parsing --set data: key
${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}
前缀,该命令将起作用。
Helm 试图使 pass some structured data in using --set
成为可能,这让你在这里绊倒了。特别是,
Lists can be expressed by enclosing values in {
and }
. For example, --set name={a, b, c}
translates to [a list of a
, b
, and c
].
因此,如果您 --set 'key={aes}AM+JYP8...'
,{aes}
部分看起来像列表语法,但 Helm 无法理解其后的内容。
您可以对大括号进行反斜杠转义,尽管这在 shell 语法中有点棘手。有一个 --set-string
选项(记录在 Helm 2 documentation 中,但仍然存在于 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
会自动读入,并被命令行选项覆盖。)
${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}
前缀,该命令将起作用。
Helm 试图使 pass some structured data in using --set
成为可能,这让你在这里绊倒了。特别是,
Lists can be expressed by enclosing values in
{
and}
. For example,--set name={a, b, c}
translates to [a list ofa
,b
, andc
].
因此,如果您 --set 'key={aes}AM+JYP8...'
,{aes}
部分看起来像列表语法,但 Helm 无法理解其后的内容。
您可以对大括号进行反斜杠转义,尽管这在 shell 语法中有点棘手。有一个 --set-string
选项(记录在 Helm 2 documentation 中,但仍然存在于 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
会自动读入,并被命令行选项覆盖。)