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
相关产品推荐
相关产品推荐

