1. with 修改范围
下一个要看的控制结构是 with。它控制着变量作用域。回想一下,. 是对当前范围的引用。因此,.Values 告诉模板在当前范围中查找 Values 对象。
其语法 with 类似于一个简单的 if 语句:
{{ with PIPELINE }}
# restricted scope
{{ end }}
范围可以改变。with 可以允许将当前范围(.)设置为特定的对象。例如,我们一直在使用的 .Values.favorites。让我们重写我们的 ConfigMap 来改变 . 范围来指向 .Values.favorites:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
{{- with .Values.favorite }}
drink: {{ .drink | default "tea" | quote }}
food: {{ .food | upper | quote }}
{{- end }}
注意,现在我们可以引用 .drink 和 .food 无需对其进行限定。这是因为该 with 声明设置 . 为指向 .Values.favorite。在 {{ end }} 后 . 复位其先前的范围。
但是请注意!在受限范围内,此时将无法从父范围访问其他对象。例如,下面会报错:
{{- with .Values.favorite }}
drink: {{ .drink | default "tea" | quote }}
food: {{ .food | upper | quote }}
release: {{ .Release.Name }}
{{- end }}
它会产生一个错误,因为 Release.Name 它不在 . 限制范围内。但是,如果我们交换最后两行,所有将按预期工作,因为范围在 {{ end }} 之后被重置。
{{- with .Values.favorite }}
drink: {{ .drink | default "tea" | quote }}
food: {{ .food | upper | quote }}
{{- end }}
release: {{ .Release.Name }}
看下 range,我们看看模板变量,它提供了一个解决上述范围问题的方法。
[!TIP|style:flat] 在
with中访问.Release、.Chart以及include模板时,可以通过$来访问变量,详情访问 变量