1. define 声明模板

define 操作允许我们在模板文件中创建一个命名模板,语法如下:

{{ define "MY.NAME" }}
  # body of template here
{{ end }}

比如我们可以定义一个模板封装 Kubernetes 的标签:

{{- define "mychart.labels" }}
  labels:
    generator: helm
    date: {{ now | htmlDate }}
{{- end }}

现在我们将模板嵌入到了已有的配置映射中,然后使用 template 包含进来:

{{- define "mychart.labels" }}
  labels:
    generator: helm
    date: {{ now | htmlDate }}
{{- end }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
  {{- template "mychart.labels" }}
data:
  myvalue: "Hello World"
  {{- range $key, $val := .Values.favorite }}
  {{ $key }}: {{ $val | quote }}
  {{- end }}

当模板引擎读取该文件时,它会存储 mychart.labels 的引用直到 template "mychart.labels" 被调用。 然后会按行渲染模板,因此结果类似这样:

# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: running-panda-configmap
  labels:
    generator: helm
    date: 2016-11-02
data:
  myvalue: "Hello World"
  drink: "coffee"
  food: "pizza"

[!NOTE|style:flat] 注意:define不会有输出,除非像本示例一样用模板调用它。

按照惯例,Helm chart 将这些模板放置在局部文件中,一般是 _helpers.tpl。把这个方法移到那里:

[!TIP|style:flat] 在 Helm 中使用以下划线 _ 开头的文件来创建模板,该文件不会被渲染成 Kuberentes 的清单文件。关于例外,详见:Chart 命名模板

{{/* Generate basic labels */}}
{{- define "mychart.labels" }}
  labels:
    generator: helm
    date: {{ now | htmlDate }}
{{- end }}

按照惯例 define 方法会有个简单的文档块({{/* ... */}})来描述要做的事。

尽管这个定义是在 _helpers.tpl 中,但它仍能访问 configmap.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
  {{- template "mychart.labels" }}
data:
  myvalue: "Hello World"
  {{- range $key, $val := .Values.favorite }}
  {{ $key }}: {{ $val | quote }}
  {{- end }}

如上所述,模板名称是全局的。因此,如果两个模板使用相同名字声明,会使用最后出现的那个。由于子 chart 中的模板和顶层模板一起编译, 最好用 chart 特定名称命名你的模板。常用的命名规则是用 chart 的名字作为模板的前缀: {{ define "mychart.labels" }}

[!TIP|style:flat] define 定义的模板,一般推荐时 include,而不是 template来渲染。

Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2022-01-08 03:09:47

results matching ""

    No results matching ""