我想使用命名模板作为 YAML 列表的元素。
例如:
我想使用以下模板
{{- define "mytemplate" -}}
name: foo
value: bar
details: baz
{{- end -}}
作为
evenmore
列表的元素:
some:
more:
evenmore:
- name: foo
value: bar
details: baz
我尝试将
mytemplate
明确地视为列表元素,方法是将其更改为:
{{- define "mytemplate" -}}
- name: foo
value: bar
details: baz
{{- end -}}
但是,如果我想在
merge
和其他一些命名模板上使用 mytemplate
函数,这种方法是不可用的。
我也尝试过使用
list
功能:
spec:
more:
evenmore:
{{- include "mytemplate" . | list | toYaml | indent 6 }}
基于微小的修改,这将给我留下多行字符串作为列表元素或列表元素顶部字段的不匹配缩进。
有没有一种方法可以在不将命名模板修改为列表元素本身的情况下将命名模板用作列表元素?
some:
more:
evenmore:
- {{ include "mytemplate" . | indent 8 | trim }}
拆开最后一行:
调用
mytemplate
,使用当前上下文作为参数,但使用 Helm include
函数将其输出作为字符串。
每行(包括第一行)缩进 8 个空格。
修剪掉前导和尾随的空格;从第一行删除缩进。
因此模板输出中的第一行(
name:
)将紧跟在连字符空格 YAML 列表项标记之后;其余行(value:
和 details:
)将缩进 8 个空格,其中数字 8 是经过精心选择的,因此它们在输出中排列。