0

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

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 变量。

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

4

1 回答 1

1

Gotext/template语言中.是一个特殊的“上下文”变量,并且引用喜欢.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 }}
于 2020-09-18T20:24:14.170 回答