我想创建一个模板文件,可以与列表作为常规值进行交互。基本上,在它们上面循环。换句话说,假设有以下两个文件:
values1.yaml
jobs:
single: true
foo: bar
kek: bor
和
values2.yaml
jobs:
- foo: bar
kek: bor
- foo: rab
kek: rob
如何创建一个在两个值文件上工作的模板?我个人认为可以通过以下方式在列表中注入第一个文件:
{{ if Values.jobs.single }}
{{ $myList := list .Values.jobs }}
{{ else }}
{{ $myList := .Values.jobs }}
{{- end }}
{{- range $myList }}
...
不幸的是,这似乎不起作用,因为赋值是局部的(因此只能在if-else块中可用)。
Helm有两个函数可以检查对象的类型。这些通常使用Go术语,所以你通常称之为"列表"。在大多数语言中都是"切片"。在走。
为了简化变量作用域的一些问题,我还只定义变量一次,并使用ternary
函数将条件内联移动。
{{- $j := .Values.jobs }}
{{- $myList := kindIs "slice" $j | ternary $j (list $j) }}
{{- range $myList }}...{{ end }}
在对内联条件有更自然支持的语言中,这相当于
j = values[:jobs]
my_list = if j.is_a?(Array)
then j
else [j]
end
my_list.each {|dict| ...}