将 yaml 数组与 helm 模板结合使用

tur*_*too 2 templates yaml kubernetes-helm

我有一个表示 Helm 图表的目录结构,如下所示:

Chart.yaml
values.yaml
templates/
  template.tpl
Run Code Online (Sandbox Code Playgroud)

值.yaml:

foo: ["bar", "baz"]

FOO:
 - BAR
 - BAZ
Run Code Online (Sandbox Code Playgroud)

模板/template.tpl:

thing1: {{ .Values.foo }}
thing2: {{ .Values.FOO }}
Run Code Online (Sandbox Code Playgroud)

helm template .在此目录中运行的输出。(头盔版本v3.6.3)

---
# Source: test/templates/template.tpl
thing1: [bar baz]
thing2: [BAR BAZ]
Run Code Online (Sandbox Code Playgroud)

您可以在此处看到 thing1 和 thing2 都映射到分别包含一个字符串的 YAML 数组,即字符串"bar baz""BAR BAZ"

我希望数组中的项目在模板化后仍然是单独的。但是我在 helm 模板语言文档中找到的内置函数(如{{ list .Values.foo }})并没有做任何有效的事情。

有人可以指出如何正确模板 YAML 字符串数组吗?

fly*_*lyx 7

Helm 使用 Go 模板,而 Go 模板不支持 YAML。因此,它只会以 Go 的默认格式发出序列(YAML 没有数组),恰好是[<item> ...].

您需要告诉 Helm 将值转换为 YAML 格式:

thing1: {{ .Values.foo | toYaml | nindent 2 }}
thing2: {{ .Values.FOO | toYaml | nindent 2 }}
Run Code Online (Sandbox Code Playgroud)

toYaml执行实际转换(请参阅文档),nindent 2添加换行符,然后每行缩进 2 个空格。toYaml当选择将输入呈现为多行(您无法控制)时,这一点很重要。

  • 令人惊讶的是,YAML 文件需要转换为“toYaml”:/ (3认同)