在 helm 中模板化外部文件

ara*_*ind 4 kubernetes kubernetes-helm

我想使用 application.yaml 文件作为配置映射传递。

所以我写了这个。

 apiVersion: v1
 kind: ConfigMap
 metadata:
  name: conf
data:
{{ (.Files.Glob "foo/*").AsConfig | indent 2 }}
Run Code Online (Sandbox Code Playgroud)

我的 application.yaml 存在于 foo 文件夹中,并包含一个服务名称,我需要通过 helm 插值动态填充它。

foo:
  service:
    name: {{.Release.Name}}-service
Run Code Online (Sandbox Code Playgroud)

当我干跑时,我得到了这个

apiVersion: v1
kind: ConfigMap
metadata:
  name: conf
data:
  application.yaml: "ei:\r\n  service:\r\n    name: {{.Release.Name}}-service"
Run Code Online (Sandbox Code Playgroud)

但我想name: {{.Release.Name}}-service包含实际的掌舵版本名称。

是否可以使用 helm 对​​外部文件进行模板化,如果是,那么该怎么做?我已经浏览了https://v2-14-0.helm.sh/docs/chart_template_guide/#accessing-files-inside-templates 我没有找到解决我的用例的东西。我也可以将内容复制到 config map yaml 并可以进行插值,但我不想这样做。我希望 application.yml 位于一个单独的文件中,这样处理配置更改就很简单了..

Dav*_*aze 9

Helm包含一个tpl函数,可用于将任意字符串扩展为 Go 模板。在您的情况下,输出...AsConfig是一个字符串,您可以将其输入到模板引擎中。

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-conf
data:
{{ tpl (.Files.Glob "foo/*").AsConfig . | indent 2 }}
Run Code Online (Sandbox Code Playgroud)

完成此操作后,您可以从配置文件中调用任意模板代码。例如,有一个定义的模板来生成当前图表的名称前缀是很常见的,因此您的配置文件可以改为指定

foo:
  service:
    name: {{ template "mychart.name" . }}-service
Run Code Online (Sandbox Code Playgroud)