假如我们在values.yaml中的app
路径下定义了多个参数,在相应的template中调用时需要重复声明多个.Values.app
根路径:
with
操作可以解决这个问题——它用于控制变量的作用域,然后重新用 .
调用就表示对当前作用域的引用。例如,我们一直在使用 .Values.app
,让我们重写下configmap.yaml
模板文件来更改 .
的范围指向 .Values.app
:
使用with block时,还有一个问题需要特别注意,由于with作用域此时为.Values.app
, 如果我们在里面继续调用其他的全局变量(如.Release.Name
),则调用路径实际为.Values.app.Release.Name
,不符合预期,进行渲染时也会报错。
可以使用$
符号来解决这个问题,它表示重新从根路径开始搜索:
configmap.yaml
:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-appinfo
data:
{{- with .Values.app }}
{{- with .ui }}
background: {{ .bg }}
foreground: {{ .fg }}
{{- end }}
{{- with .db }}
database: {{ .name }}
connection: {{ .conn }}
{{- end }}
release: {{ $.Release.Name }}
{{- end }}
values.yaml
:
app:
ui:
bg: red
fg: black
db:
name: "users"
conn: "mongodb://localhost:27020/mydb"
执行结果: