如何用yq为Helm Deployment模板Pod添加正确格式的subdomain属性
解决yq处理Helm模板时大括号转义问题
问题原因
你执行的yq命令中,{{.Values.global.deployment.subdomain}}被yq识别为自身的表达式语法,自动对大括号进行了转义,导致生成了{{{{}}.Values.global.deployment.subdomain{{}}}}这种不符合预期的格式。需要让yq将Helm模板变量当作纯字符串处理,避免解析转义。
解决方案
使用以下命令即可得到正确的格式:
yq4 eval --inplace '.spec.template.spec += {"subdomain": ''{{ .Values.global.deployment.subdomain }}''}' test.yml
或者采用双引号包裹yq表达式、转义内部双引号的写法:
yq4 eval --inplace ".spec.template.spec += {\"subdomain\": '{{ .Values.global.deployment.subdomain }}'}" test.yml
原理说明
- 第一种写法中,通过在shell里用两个连续单引号(
'')表示单个单引号,让yq接收到的字符串是{{ .Values.global.deployment.subdomain }},不会触发yq的表达式解析逻辑。 - 第二种写法用双引号包裹整个yq表达式,内部的双引号用反斜杠转义,同时用单引号包裹Helm模板变量,确保yq将其视为纯文本。
执行上述命令后,test.yml中会生成符合预期的内容:
subdomain: {{ .Values.global.deployment.subdomain }}
内容的提问来源于stack exchange,提问作者Sabreen Salama
相关产品推荐
相关产品推荐

