【问题标题】:loop through files of helm chart and inject values循环遍历 helm chart 文件并注入值
【发布时间】:2020-09-17 23:04:12
【问题描述】:

我有一个这样的目录结构:

helm
|-->mappings
   |--> foo
         foo1.yaml foo2.yaml
|-->templates 
     mapping.yaml
  values.yaml

values.yaml 的位置 由于{{ .Values.data.hostname }}等环境,有一个值我需要成为一个变量

在mapping.yaml中

{{- $files := .Files }}

{{- range .Values.mappings.foo }}
{{- $genericfilepath := printf "mappings/foo/%s.yaml" . }}
{{ $files.Get $genericfilepath }}

{{- end }}

目前 mapping.yaml 文件循环通过指定目录并加载 yaml 文件但是我无法访问 Values 变量。

我还尝试了 subchart,其中 values.yaml 文件位于 helm/mappings/foo/values.yaml 下,但它也无法解析,或者我不是 100% 理解 subchart 是否是解析文件的正确解决方案路径

【问题讨论】:

    标签: kubernetes-helm helmfile


    【解决方案1】:

    Go text/template language 中,. 是一个特殊的“上下文”变量,而像.Files.Values 这样的引用实际上是从. 检索字段。例如,您可以编写一个示例模板:

    {{- $dot := . -}}
    # These both print the same value
    dot-values-foo: {{ .Values.foo }}
    dollars-dot-values-foo: {{ $dot.Values.foo }}
    

    . 的特殊之处之一是range 语句在遍历集合时将. 设置为每个项目。在您的示例中:

    {{/* . is the top item; .Values is valid */}}
    {{- range .Values.mappings.foo }}
    {{/* . is one of the items in `mappings.foo` */}}
    {{- end }}
    {{/* . is the top item again */}}
    

    如果我需要将. 用于这样的特殊目的,我倾向于将原始顶部项目保存在一个变量中,然后我可以引用其中的字段。

    {{- $top := . }}
    {{- range .Values.mappings.foo }}
    {{- $genericfilepath := printf "mappings/foo/%s.yaml" . }}
    {{ $top.Files.Get $genericfilepath }}
    {{ index $top.Values.enabled . }}
    {{- end }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      • 2020-11-05
      • 1970-01-01
      • 2013-04-19
      相关资源
      最近更新 更多