在shell脚本中,我希望为一个变量分配在部署中的值中使用什么。对于我的生活,我不知道如何使它工作。
为了设置要使用我的变量的值,我的helm部署脚本文件有以下内容:
--set AuthConfValue=$AUTH_CONF_VALUE为了使用变量,我在deployment.yaml文件中使用了以下内容:
- name: KONG_SETTING
value: "{ {{ .Values.AuthConfValue }} }"如果我在shell脚本中分配变量,如下所示:
AUTH_CONF_VALUE="ernie"它将工作,并且部署中的值将如下所示:
value: '{ ernie }'现在,如果我尝试像这样赋值变量:
AUTH_CONF_VALUE="\\\"ernie\\\":\\\"123\\\""然后,当舵机部署运行时,我将得到错误error converting YAML to JSON: yaml: line 118: did not find expected key。
我希望这将给我在部署中的以下价值:
value: "{ "ernie":"123" }"如果我将该值硬编码到deployment.yaml中,则如下所示:
- name: KONG_SETTING
value: "{ \"ernie\": \"123\" }"然后运行helm部署,它将工作,并在部署中填充以下值-
value: "{ "ernie":"123" }"有人能告诉我我是否/如何能做到这一点吗?
发布于 2022-09-10 00:26:07
Helm --set option还使用反斜杠转义。因此,在您的示例中,主机外壳中的$AUTH_CONF_VALUE变量在每个引号之前包含一个反斜杠,这是由--set使用的,因此.Values.AuthConfValue根本不包含反斜杠,因此您将得到无效的YAML。
如果您希望尽可能接近现有的表单,那么让我们构造一个没有反斜杠的字符串(希望没有逗号或括号,因为这些字符串对--set也有特殊意义)
AUTH_CONF_VALUE='"ernie":"123"'
helm install --set AuthConfValue="$AUTH_CONF_VALUE" .当Helm扩展一个模板时,它对可能使用它的上下文一无所知。就你而言,你知道
.Values.AuthConfValue是JSON对象{ ... }包围它,那么它应该是一个有效的JSON对象。
Helm包含一个文档很少的toJson函数,它接受任意对象并将其转换为JSON;任何有效的JSON也都是有效的YAML。所以最接近你的方法可能看起来
- name: KONG_SETTING
value: {{ printf "{%s}" .Values.AuthConfValue | toJson }}如果您愿意更多地修改您的部署过程,则可以减少转义,增加确定性。在上面的序列中,我们有一个恰好是JSON对象的字符串;如果我们有一个实际的对象怎么办?想象一下这样的设置
# kong-auth.yaml
authConf:
ernie: "123"您可以在安装时使用helm install -f选项提供此文件。由于有效的JSON是有效的YAML,所以您也可以在这里提供一个JSON文件,而无需更改任何内容。
helm install -f kong-auth.yaml .现在,对于这个设置,.Values.authConf是一个对象;唯一需要进行的转义是标准的YAML/JSON转义(例如引用"123",所以它是一个字符串,而不是数字)。现在我们可以使用toJson两次,一次用于获取{"ernie":"123"} JSON对象字符串,另一次用于将该字符串转义为值"{\"ernie\":\"123\"}"。
- name: KONG_SETTING
value: {{ .Values.authConf | toJson | toJson }}设置它需要修改您的部署脚本,但是避免引用和逃避关注点要安全得多。
https://stackoverflow.com/questions/73665806
复制相似问题