You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Helm模板中Vault注解变量无法求值问题求助

问题排查与解决

你的问题出在Helm模板标签嵌套使用,导致内部的{{ .Values... }}没有被Helm解析,直接作为字符串输出了。Helm模板不允许在{{ }}内部再嵌套{{ }}标签,你需要把Vault模板的内容作为字符串拼接,同时将Helm变量替换进去。

修正后的Helm代码

可以用printf函数将Helm变量插入到Vault模板字符串中,避免标签嵌套:

vault.hashicorp.com/agent-inject-secret-sourcedetails: |
          {{ printf "{{ with secret \"%s/%s\" -}}" .Values.vault.path .Values.serversdetails.dbsourcedetails.hostname }}
          {{ printf "{{ .Data.data.%s }}" .Values.serversdetails.dbsourcedetails.pgusername }}
          {{ printf "{{- end }}" }}

或者用反引号包裹Vault模板的固定部分,再拼接Helm变量:

vault.hashicorp.com/agent-inject-secret-sourcedetails: |
          {{`{{ with secret "`}}{{ .Values.vault.path }}/{{ .Values.serversdetails.dbsourcedetails.hostname }}{{`" -}}`}}
          {{`{{ .Data.data.`}}{{ .Values.serversdetails.dbsourcedetails.pgusername }}{{` }}`}}
          {{`{{- end }}`}}

修正后输出效果

执行helm template demotest后,会生成你期望的Manifest内容:

vault.hashicorp.com/agent-inject-secret-sourcedetails: |
          {{ with secret "/dmw-mysql/kv2/postgres/semarchy/abc.postgres.database.azure.com" -}}
          {{ .Data.data.semarchy_dloc1 }}
          {{- end }}

原因说明

原来的代码中,{{ .Data.data.{{ .Values.serversdetails.dbsourcedetails.hostname }} }}属于嵌套的模板标签,Helm会将内部的{{ .Values... }}视为普通字符串,不会进行变量求值。通过printf或字符串拼接的方式,先让Helm解析变量并替换,再输出完整的Vault模板字符串,就能解决这个问题。

内容的提问来源于stack exchange,提问作者Naresh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:11:07