使用带有 helm 模板的 yaml 数组

问题描述 投票:0回答:1

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

Chart.yaml
values.yaml
templates/
  template.tpl

values.yaml:

foo: ["bar", "baz"]

FOO:
 - BAR
 - BAZ

模板/template.tpl:

thing1: {{ .Values.foo }}
thing2: {{ .Values.FOO }}

在此目录中运行

helm template .
的输出。 (Helm版本v3.6.3)

---
# Source: test/templates/template.tpl
thing1: [bar baz]
thing2: [BAR BAZ]

您可以在此处看到 thing1 和 thing2 都映射到各自包含一个字符串的 YAML 数组,即字符串

"bar baz"
"BAR BAZ"

我希望数组中的项目在模板化后仍然是单独的字符串。但是我在 helm 模板语言文档中找到的内置函数(如

{{ list .Values.foo }}
)并没有做任何有成效的事情。

有人可以告诉我如何正确模板化 YAML 字符串数组吗?

templates yaml kubernetes-helm
1个回答
8
投票

Helm 使用 Go 模板,而 Go 模板不支持 YAML。因此,它只会以 Go 的默认格式发出 sequence(YAML 没有数组),恰好是

[<item> ...]

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

thing1: {{ .Values.foo | toYaml | nindent 2 }}
thing2: {{ .Values.FOO | toYaml | nindent 2 }}

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

© www.soinside.com 2019 - 2024. All rights reserved.