【问题标题】:Templating external files in helm在 helm 中模板化外部文件
【发布时间】:2020-05-09 08:47:26
【问题描述】:

我想使用 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 位于一个单独的文件中,这样,处理配置更改会很简单..

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    据我所知,helm(也不是 Sprig)中没有可用的递归模板评估,可能是设计使然

    但是,在您的具体情况下,如果您不期望 golang 模板的完整功能,您可以作弊并使用 Sprig 的regexReplaceAllLiteral

    kind: ConfigMap
    data:
    {{/* here I have used character classes rather that a sea of backslashes
         you can use the style you find most legible */}}
    {{ $myRx := "[{][{] *[.]Release[.]Name *[}][}]" }}
    {{ regexReplaceAllLiteral $myRx (.Files.Glob "foo/*").AsConfig .Release.Name }}
    

    如果您真的需要 golang 模板的全部功能用于您的配置文件,那么 helm 本身并不是这样做的机制 - 但helmfile 有很多花哨的技巧来生成 helm 将安装的终极 helm 图表

    【讨论】:

    • 请接受David's answer,因为那个实际上是准确的;我只是没看到tpl函数
    【解决方案2】:

    Helm includes a tpl function 可用于将任意字符串扩展为 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-21
      • 2020-01-12
      • 1970-01-01
      • 2021-12-07
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多