kubernetes-helm - Helm 模板 .Files.Get 函数在范围内无法正常工作
问题描述
我正在尝试使用文件夹和文件名通过值文件列表迭代构建动态配置映射清单。这就是我的 values.development.yaml 的样子:
templates:
folder: "foldername"
files:
- filename1
- filename2
这是我的原始配置图,带有硬编码的文件名:
apiVersion: v1
kind: ConfigMap
metadata:
name: templates
binaryData:
filename1: {{ .Files.Get "foldername/filename1.zip" | b64enc }}
filename2: {{ .Files.Get "foldername/filename2.zip" | b64enc }}
这就是我尝试开始的方式,但是 .File.Get 函数不想在该范围内运行,因为我可以在外面正常使用它。当我像这样使用它时:
apiVersion: v1
kind: ConfigMap
metadata:
name: templates
binaryData:
{{- range $.Values.templates.files }}
{{ . }}: {{ .Files.Get "foldername/filename1.zip" | b64enc }}
{{- end }}
得到这个错误:
helm template template -f deploy/template/values.development.yaml deploy/template --debug
install.go:173: [debug] Original chart version: ""
install.go:190: [debug] CHART PATH:
Error: template: template/templates/configmap.yaml:14:20: executing "template/templates/configmap.yaml" at <.Files.Get>: can't evaluate field Files in type interface {}
helm.go:81: [debug] template: template/templates/configmap.yaml:14:20: executing "template/templates/configmap.yaml" at <.Files.Get>: can't evaluate field Files in type interface {}
不用说,我对 Go 语言了解不多。你能给我一些关于如何正确构建该列表的提示吗?谢谢!
解决方案
在 Gotext/template
语言中,.
是一个具有多种含义的特殊变量。值得注意的是,在循环内部range
,.
成为循环中的当前项,因此.Files
指的Files
是当前循环项中的字段,而不是顶级 Helm 对象。
您可以通过保存.
或保存.Files
到循环外的局部变量中来解决此问题:
binaryData:
{{- $files := .Files }}
{{- range $.Values.templates.files }}
{{ . }}: {{ $files.Get "foldername/filename1.zip" | b64enc }}
{{- end }}
现在循环内部是来自数组.
的字符串filename1
, filename2
, ... files
但是您已将顶级.Files
对象保存到$files
局部变量中,因此您可以参考它。
推荐阅读
- php - 如何在 foreach 循环中使用 if 语句?
- javascript - React hooks:如何使用 react-hooks/exhaustive-deps 规则在没有无限循环的情况下读取和更新钩子中的状态
- amazon-web-services - Codedeploy 需要很长时间
- c# - DataSource 中的更新重置 CheckedListBox 复选框
- java - Selenium 脚本来包装调用 Java
- ios - 错误:用于启动的资源目录名称无效
- google-cloud-ml - 在 Cloud ML Engine 中使用自定义模型进行在线预测的问题
- macos - 我的 docker-compose up 不再工作,无法启动 mariadb
- reactjs - onclick 在地图功能中不起作用
- reactjs - 使用扩展运算符添加依赖项时的 useEffect 警告