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

如何在Helm生成ConfigMap的文件内容中引用循环内定义的变量

问题原因

你调用tpl函数渲染文件内容时,传入的第二个参数是Chart根上下文$,循环内定义的局部变量$path没有被包含在这个上下文里,因此文件内无法直接引用该变量,抛出未定义错误。

解决方法

方法1:合并自定义变量到渲染上下文(改动最小)

这个方案可以保留你现有文件中.Values相关的引用无需修改,只需调整两处代码:

  1. 修改ConfigMap模板的tpl调用行,用merge函数把循环变量合并到根上下文:
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ template "proj.name" . }}
  labels:
    app.kubernetes.io/name: {{ include "proj.name" . }}
    app.kubernetes.io/version: {{ include "proj.version" . }}
data:
  {{- range $path, $_ := .Files.Glob "myconfig/*.txt" -}}
  {{ $path | base | nindent 2 }}: |
  {{- tpl ($.Files.Get $path) (merge (dict "path" $path) $) | nindent 4 }}
  {{- end -}}
  1. 修改myconfig/name.txt中的变量引用,把全局变量格式的{{ $path }}改为上下文变量格式{{ .path }}:
i am able to access this -> {{ .Values.somekey }}
Now can access this -> {{ .path }}

如果你只需要文件名不需要完整路径,可以在合并时直接传处理后的结果:(dict "filename" ($path | base)),文件内直接引用{{ .filename }}即可。

方法2:构造独立上下文

如果需要隔离全局上下文避免污染,也可以自定义渲染上下文,把需要用到的所有变量明确传入:

  1. 调整tpl调用参数:
{{- tpl ($.Files.Get $path) (dict "Values" $.Values "CurrentPath" $path) | nindent 4 }}
  1. 对应修改文件内的所有变量引用:
i am able to access this -> {{ .Values.somekey }}
Now can access this -> {{ .CurrentPath }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:06:02