Helm模板中自定义.引用(如.global/.name)的作用与定义方式
Helm模板中自定义
.global/.name这类引用的机制与赋值方式 这些自定义的.global、.name并非Helm预定义变量,而是调用模板时手动传入的上下文对象字段。Helm模板基于Go模板实现,.始终代表当前模板的上下文对象——预定义的.Values、.Release是Helm默认注入到根上下文的字段,而.global、.name这类是用户在调用自定义模板时,主动传递的额外字段。
核心机制
用define定义的自定义模板本身不自带上下文,必须在通过include或template调用时,传入一个上下文对象(可以是任意结构的字典、结构体)。模板内部通过.访问这个传入对象的字段,就像你看到的.global、.name。
常见赋值/调用方式
1. 用dict构造上下文传入
在模板文件(比如templates/secret.yaml)中调用common.secret._header时,用Go模板的dict函数构造包含指定字段的对象:
{{- include "common.secret._header" (dict "global" . "name" "my-app-secret") }} data: db-password: {{ .Values.db.password | b64enc }}
这里dict生成了一个包含两个键的字典:
global的值是根上下文.(即Helm默认的全局上下文,包含.Chart、.Release等预定义字段)name的值是字符串my-app-secret,作为Secret的名称
2. 嵌套模板传递上下文
如果在另一个自定义模板中调用,直接传递已有的上下文对象即可:
{{- define "common.secret.complete" }} {{- include "common.secret._header" . }} # 直接传递当前上下文,其中包含global和name字段 data: api-key: {{ .global.Values.api.key | b64enc }} {{- end }} # 调用外层模板时传入上下文 {{- include "common.secret.complete" (dict "global" . "name" "api-secret") }}
常见用途说明
.global一般用来传递Helm的根上下文,避免多层模板嵌套时丢失对.Chart、.Release等全局变量的访问;.name这类字段是模板的动态参数,让同一个模板可以生成不同名称的资源,提升复用性。
内容的提问来源于stack exchange,提问作者94621
相关产品推荐
相关产品推荐

