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 模板时,可以通过 $ 来访问变量,详情访问 变量

Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2022-01-08 03:09:47

results matching ""

    No results matching ""