什么是什么,什么用例有点“。”在掌舵图中?
What is, and what use cases have the dot "." in helm charts?
我目前正在浏览 helm 的文档,点 (.) 至少有 3 种不同的用法,是否有具体的定义?它与 bash 使用(实际 folder/files)有什么共同点吗?
文档中的一些案例
这会打印之前调用范围内访问的文件吗?
{{- $files := .Files }}
{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
{{ . }}: |-
{{ $files.Get . }}
{{- end }}
这告诉 "mychart.app" 使用当前文件夹中的文件(类似 bash 的行为)
{{ include "mychart.app" . | indent 4 }}
还有这个,我猜它从整个文件夹中获取值???我猜这是不正确的,因为它不起作用(它是由另一名员工当时制作的,我必须修复它)
{{- define "read.select-annot" -}}
{{- range $key, $value := . }}
{{ $key }}: {{ $value }}
{{- end }}
{{- end }}
感谢您的帮助
一般来说,Helm模板中的.
与文件或目录无关。
Helm 模板语言使用 Go 的 text/template 系统。句点字符可以有几种不同的显示方式。
首先,.
可以是字符串中的一个字符:
{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
{{/* ^^^^^^^^^^^^
this is a literal string "config1.toml" */}}
...
{{- end }}
其次,.
可以是查找运算符。您的问题中没有任何可靠的例子,但典型的用途是查找值。如果您的 values.yaml
文件有
root:
key: value
那么你可以展开
{{ .Values.root.key }}
和 root
和 key
之前的 .
在字典结构中向下导航一级。
第三个用途,也可能是让您感到困惑的一个,是 .
本身就是一个变量。
{{ . }}
您可以对其进行字段查找,并且有一些示例:.Files
与 index . "Files"
相同,并在对象 "Files" 上查找字段 .
.
您在多个地方使用 .
作为变量:
{{- $files := .Files }} {{/* Get "Files" from . */}}
{{ . }} {{/* Write . as a value */}}
{{ include "mychart.app" . }} {{/* Pass . as the template parameter */}}
.
比较棘手,因为它有一定的语境意义:
- 在顶层,Helm initializes
.
to an object 键 Files
、Release
、Values
和 Chart
。
- 在
define
d 模板中,.
是模板的参数。 (所以当你 include
或 template
时,你需要将 .
作为该参数向下传递。)
- 在
range
循环中,.
是当前迭代的项目。
- 在
with
块中,.
是匹配项,如果它存在。
特别是,与 range
的交互可能很棘手。让我们看一下循环的简化版本:
# {{ . }}
{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
- {{ . }}
{{- end }}
在 range
循环之外,.
可能是顶级 Helm 对象。但是在 range
循环中, .
是文件名(每个值依次来自 tuple
)。这就是您需要将 .
中的值保存到局部变量中的地方:
{{/* We're about to invalidate ., so save .Files into a variable. */}}
{{- $files := .Files }}
{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
{{/* This . is the filename from the "tuple" call */}}
{{ . }}: |-
{{/* Call .Get, from the saved $files, passing the filename .
as the parameter */}}
{{ $files.Get . }}
{{- end }}
我目前正在浏览 helm 的文档,点 (.) 至少有 3 种不同的用法,是否有具体的定义?它与 bash 使用(实际 folder/files)有什么共同点吗?
文档中的一些案例
这会打印之前调用范围内访问的文件吗?
{{- $files := .Files }}
{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
{{ . }}: |-
{{ $files.Get . }}
{{- end }}
这告诉 "mychart.app" 使用当前文件夹中的文件(类似 bash 的行为)
{{ include "mychart.app" . | indent 4 }}
还有这个,我猜它从整个文件夹中获取值???我猜这是不正确的,因为它不起作用(它是由另一名员工当时制作的,我必须修复它)
{{- define "read.select-annot" -}}
{{- range $key, $value := . }}
{{ $key }}: {{ $value }}
{{- end }}
{{- end }}
感谢您的帮助
一般来说,Helm模板中的.
与文件或目录无关。
Helm 模板语言使用 Go 的 text/template 系统。句点字符可以有几种不同的显示方式。
首先,.
可以是字符串中的一个字符:
{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
{{/* ^^^^^^^^^^^^
this is a literal string "config1.toml" */}}
...
{{- end }}
其次,.
可以是查找运算符。您的问题中没有任何可靠的例子,但典型的用途是查找值。如果您的 values.yaml
文件有
root:
key: value
那么你可以展开
{{ .Values.root.key }}
和 root
和 key
之前的 .
在字典结构中向下导航一级。
第三个用途,也可能是让您感到困惑的一个,是 .
本身就是一个变量。
{{ . }}
您可以对其进行字段查找,并且有一些示例:.Files
与 index . "Files"
相同,并在对象 "Files" 上查找字段 .
.
您在多个地方使用 .
作为变量:
{{- $files := .Files }} {{/* Get "Files" from . */}}
{{ . }} {{/* Write . as a value */}}
{{ include "mychart.app" . }} {{/* Pass . as the template parameter */}}
.
比较棘手,因为它有一定的语境意义:
- 在顶层,Helm initializes
.
to an object 键Files
、Release
、Values
和Chart
。 - 在
define
d 模板中,.
是模板的参数。 (所以当你include
或template
时,你需要将.
作为该参数向下传递。) - 在
range
循环中,.
是当前迭代的项目。 - 在
with
块中,.
是匹配项,如果它存在。
特别是,与 range
的交互可能很棘手。让我们看一下循环的简化版本:
# {{ . }}
{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
- {{ . }}
{{- end }}
在 range
循环之外,.
可能是顶级 Helm 对象。但是在 range
循环中, .
是文件名(每个值依次来自 tuple
)。这就是您需要将 .
中的值保存到局部变量中的地方:
{{/* We're about to invalidate ., so save .Files into a variable. */}}
{{- $files := .Files }}
{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
{{/* This . is the filename from the "tuple" call */}}
{{ . }}: |-
{{/* Call .Get, from the saved $files, passing the filename .
as the parameter */}}
{{ $files.Get . }}
{{- end }}