Sat*_*mar 3 go-templates kubernetes-helm
我了解 Helm 图表中的用法.Values.varName,它用于引用Values.yaml文件中的变量
我想知道$.Values.varName和之间的区别.Values.varName
例如,当我设置name: $.Values.varName和name: .Values.varName
与许多其他语言一样,Go文本/模板.语言中有一个字段访问运算符。在该表达式的更明显的后半部分中,.Values.varName查找varName值对象中的字段(对象字段或映射成员)。
Helm 有一个标准的顶级对象,其中包含多个字段,包括Values. 因此,这两个表达式通常从顶级对象开始,在其中查找,然后在其中Values查找。varName
在text/template语言中,.也是一个变量。当您评估顶级templates/*.yaml文件时,.是顶级 Helm 对象,但在define函数内部,它是模板的单个参数,在range循环内部,它是当前循环项,依此类推。在“是什么”和“什么用例”中带有点“.”。在舵图中?我列出更多案例。
最后$也是一个变量。例如,在range循环的上下文中,$即使发生更改,也会保留顶级值.。 $应始终是顶级 Helm 值。
产生差异的地方是在循环range或其他重新绑定的上下文中.。在这种情况下,您需要$.Values引用顶级对象。
举个例子,假设values.yaml包含
varName: foo
someNumbers:
- one
- two
- three
Run Code Online (Sandbox Code Playgroud)
然后在这个模板文件中:
apiVersion: v1
kind: ConfigMap
metadata:
annotations:
# in the top level template so these are the same
value-is-foo: {{ .Values.varName }}
value-is-also-foo: {{ $.Values.varName }}
data:
{{- range .Values.someNumbers }}
# now $ is the top-level object, but . is "one", "two", "three"
{{ . }}: one, two, or three
{{ $.Values.varName }}-{{ . }}: foo-one, foo-two, foo-three
{{ .Values.varName }}: |-
an error, since the string "one" doesn't have a field or
member "Values"
{{- end }}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2199 次 |
| 最近记录: |