什么是,什么用例都有点“。” 在掌舵图中?

ano*_*999 11 go-templates kubernetes kubernetes-helm

我目前正在阅读 helm 的文档,点 (.) 至少有 3 种不同的用途,是否有任何具体定义?它与 bash 使用(实际文件夹/文件)有什么共同之处吗?

文档中的一些案例

这会打印之前调用的范围内的访问文件吗?

  {{- $files := .Files }}
  {{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
  {{ . }}: |-
    {{ $files.Get . }}
  {{- end }}
Run Code Online (Sandbox Code Playgroud)

这告诉“mychart.app”使用当前文件夹中的文件(类似 bash 的行为)

{{ include "mychart.app" . | indent 4 }}
Run Code Online (Sandbox Code Playgroud)

而这个,我想它从整个文件夹中获取值???我想这是不正确的,因为它不起作用(当时是另一名员工制作的,我必须修复它)

{{- define "read.select-annot" -}}
{{- range $key, $value := . }}
{{ $key }}: {{ $value }}
{{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

Dav*_*aze 19

一般来说,.在 Helm 中模板与文件或目录无关。

Helm 模板语言使用 Go 的文本/模板系统。句点字符可以通过几种不同的方式出现在那里。

首先,.可以是字符串中的一个字符:

{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
{{/*             ^^^^^^^^^^^^
       this is a literal string "config1.toml"             */}}
...
{{- end }}
Run Code Online (Sandbox Code Playgroud)

其次,.可以是查找操作符。您的问题中没有任何可靠的示例,但典型的用途是查找值。如果您的values.yaml文件有

root:
  key: value
Run Code Online (Sandbox Code Playgroud)

然后你可以扩展

root:
  key: value
Run Code Online (Sandbox Code Playgroud)

.beforerootkey在字典结构中向下导航一级。

第三种用途,也可能是让您感到困惑的用途,.它本身就是一个变量。

{{ .Values.root.key }}
Run Code Online (Sandbox Code Playgroud)

您可以对其进行字段查找,并且您有一些示例:.Files与 相同index . "Files",并在对象上查找字段“文件” .

您可以.在几个地方用作变量:

{{ . }}
Run Code Online (Sandbox Code Playgroud)

. 很棘手,因为它具有一定的上下文含义:

  • 在顶层,头盔初始化.到对象的钥匙FilesReleaseValues,和Chart
  • defined 模板中,.是模板的参数。(因此,当您使用include或 时template,您需要将.其作为该参数传递。)
  • range循环中,.是迭代的当前项目。
  • with块中,.是匹配项(如果存在)。

特别是,与 的交互range可能很棘手。让我们看一下循环的简化版本:

{{- $files := .Files }}        {{/* Get "Files" from . */}}
{{ . }}                        {{/* Write . as a value */}}
{{ include "mychart.app" . }}  {{/* Pass . as the template parameter */}}
Run Code Online (Sandbox Code Playgroud)

range循环之外,.可能是顶级 Helm 对​​象。但在range循环内部,.是文件名(tuple依次来自 的每个值)。这就是您需要将值保存.到局部变量的地方:

# {{ . }}
{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
- {{ . }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

  • 超级有用!除了将“.Files”保存到变量中之外,还可以使用“$.Files”:https://helm.sh/docs/chart_template_guide/variables/ (2认同)