kubernetes - 在 helm 中模板化外部文件
问题描述
我想使用 application.yaml 文件作为配置映射传递。
所以我写了这个。
apiVersion: v1
kind: ConfigMap
metadata:
name: conf
data:
{{ (.Files.Glob "foo/*").AsConfig | indent 2 }}
我的 application.yaml 存在于 foo 文件夹中,并包含一个服务名称,我需要它通过 helm 插值动态填充。
foo:
service:
name: {{.Release.Name}}-service
当我试跑时,我得到了这个
apiVersion: v1
kind: ConfigMap
metadata:
name: conf
data:
application.yaml: "ei:\r\n service:\r\n name: {{.Release.Name}}-service"
但我想name: {{.Release.Name}}-service
包含实际的掌舵版本名称。
是否可以使用 helm 为外部文件进行模板化,如果可以,那么该怎么做?我已经浏览了https://v2-14-0.helm.sh/docs/chart_template_guide/#accessing-files-inside-templates 我没有找到可以解决我的用例的东西。我还可以将内容复制到 config map yaml 并可以进行插值,但我不想这样做。我希望 application.yml 位于一个单独的文件中,这样,处理配置更改会很简单..
解决方案
Helm包含一个tpl
函数,可用于将任意字符串扩展为 Go 模板。在您的情况下,输出...AsConfig
是一个字符串,您可以将其输入模板引擎。
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-conf
data:
{{ tpl (.Files.Glob "foo/*").AsConfig . | indent 2 }}
一旦你这样做了,你就可以从配置文件中调用任意模板代码。例如,有一个已定义的模板来生成当前图表的名称前缀是很常见的,因此您的配置文件可以改为指定
foo:
service:
name: {{ template "mychart.name" . }}-service
推荐阅读
- ckeditor - 如何从源代码构建 ckeditor5 气球块?
- sql - 在 BigQuery 中限定分组依据
- javascript - 如何使此代码在 javaScript 的确定范围内找到友好的数字?
- json - 丰富的评论片段未显示
- r - 如何使用 Trycatch 跳过 R 中数据下载中的错误
- flutter - 如何使用 bloc 侦听器中的 blocprovider.value 包装导航
- flutter - Flutter:错误:[firebase_storage/object-not-found] 所需参考处不存在对象
- c# - 在 UWP 中重新排序 ListView 项目会弄乱内容
- udp - UDP广播到所有节点
- oracle - 在 Cypress 中使用 oracle visual builder 的 Oracle jet 组件进行测试