Helm 变量不区分大小写吗? (模板似乎是。)

Are Helm variables case insensitive? (The templates seem to be.)

我正在尝试调试我的一个 Helm 图表,我注意到 app.kubernetes.io/version 标签是使用以下代码创建的(在 _helpers.tpl 中):

{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}

但是实际的变量叫做appVersionversionname 也存在类似的不一致。它们的使用是使用 PascalCase,但定义是使用 camelCase。我试图 google 它,但找不到任何关于它的信息。

Helm 变量真的不区分大小写吗? 或者是否在幕后进行某种转换。

built-in objects中的字段一般都是大写的。该文档还包括一个使用 {{ .Chart.Name }}-{{ .Chart.Version }} 的示例。即使 .Chart 包含 chart.yaml 文件的内容,其字段也遵循此约定。

字段访问区分大小写,如果您引用 .Chart.appVersion,您应该得到一个错误。

在实现级别,Go 模板 . 运算符可以导航 Go 对象树或 Go 映射。顶级对象是 a mix of maps and objects.Values为非结构化地图;一个版本可以在基本上任何 YAML 布局中包含它想要的任何值。 .Release 结果也是一张地图,但是有固定的已知键。

.Chart 是一个 chart.Metadata object(不是直接解析的 YAML,而是它的对象形式)。它的字段对模板引擎可见。 Go 的规则是以大写字母开头的结构字段是可见的,并且大写字母会传回模板引擎。