Helm模板中如何在双括号内读取变量配置ConfigMap?
Helm模板中动态读取ConfigMap文件路径的解决方法
你的问题出在"files/{{ .file }}"的写法上——Helm不会解析字符串内部的模板变量,所以这个路径会被当成字面量处理,自然没法正确读取对应文件。
解决方法很简单,用字符串拼接生成正确的文件路径就行,推荐用printf函数来实现:
{{- if .Values.configMap.enabled }} {{- range .Values.configMapMount }} apiVersion: v1 kind: ConfigMap metadata: name: {{ .name }} data: {{ .file }}: {{ $.Files.Get (printf "files/%s" .file) | indent 4 }} {{- end }} {{- end }}
补充说明:
printf "files/%s" .file会把files/和当前循环的.file变量值拼接成完整路径,再传给$.Files.Get函数,这样就能动态读取对应文件了。- 原模板里的
printf "%s"是多余的,可以直接去掉,用indent 4格式化读取到的内容即可。
如果你的文件是多行文本,想要保留格式的话,可以改成这种写法:
{{- if .Values.configMap.enabled }} {{- range .Values.configMapMount }} apiVersion: v1 kind: ConfigMap metadata: name: {{ .name }} data: {{ .file }}: |- {{ $.Files.Get (printf "files/%s" .file) | trim | indent 4 }} {{- end }} {{- end }}
用|-可以保留文件的换行结构,同时去掉末尾的空行,让ConfigMap里的内容格式更规范。
内容的提问来源于stack exchange,提问作者stecog
相关产品推荐
相关产品推荐

