变量定义
在 Helm 模板中,变量是对另外一个对象的命名引用。它遵循 $name 格式,变量使用特殊的赋值运算符进行赋值 :=,我们可以修改上面的模板,为 Release.Name 声明一个变量:
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
{{- $relname := .Release.Name -}}
{{- with .Values.favorite }}
drink: {{ .drink | default "tea" | quote }}
food: {{ .food | upper | quote }}
release: {{ $relname }}
{{- end }}注意在 with 语句之前,我们先分配了 $relname := .Release.Name,然后在 with 语句块中,$relname 变量仍然表示 release 的名称,我们渲染该模板,可以得到如下的正确结果:
yaml
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart-1575982655-configmap
data:
myvalue: "Hello World"
drink: "coffee"
food: "PIZZA"
release: mychart-1575982655变量在 range 循环里面非常有用,它们可以用于类似于列表的对象来捕获索引和 value 值:
yaml
toppings: |-
{{- range $index, $topping := .Values.pizzaToppings }}
{{ $index }}: {{ $topping }}
{{- end }}yaml
pizzaToppings:
- mushrooms
- cheese
- peppers
- onions使用 Go 模板中的 range 语法,我们可以遍历这个列表并输出每个元素的索引和值。下面是完整的示例模板代码及其渲染后的输出:
注意 range 在前面,然后是变量,然后是赋值运算符,然后才是列表,这会将整数索引(从0开始)分配给 $index,并将 value 值分配给 $topping,上面的内容会被渲染成如下内容:
yaml
toppings: |-
0: mushrooms
1: cheese
2: peppers
3: onions对于同时具有 key 和 value 的数据结构,我们也可以使用 range 来获得 key、value 的值,比如,我们可以像这样循环遍历 .Values.favorite:
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
{{- range $key, $val := .Values.favorite }}
{{ $key }}: {{ $val | quote }}
{{- end }}在第一次迭代中,$key 是 drink,$val 是 coffee,在第二次迭代中,$key 是 food,$val 是 pizza。运行上面的命令将生成下面的内容:
yaml
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart-1575983119-configmap
data:
myvalue: "Hello World"
drink: "coffee"
food: "pizza"一般来说变量不是全局的,它们的作用域是声明它们的块区域,之前,我们在模板的顶层分配了 $relname,该变量将在整个模板的范围内,但是在我们上面的示例中,$key 和 $val作用域只在
yaml
{{ range }} ... {{ end }}区域内。
