关键字“template”的意思是,Helm 会找到之前创建的模板,并根据模板中的模板完成 yaml 文件。它必须提前创建。这种类型的构造允许您多次引用相同的方案。
例如,我们可以定义一个模板来封装一个 Kubernetes 的标签块:
{{- define "mychart.labels" }}
labels:
generator: helm
date: {{ now | htmlDate }}
{{- end }}
现在我们可以将此模板嵌入到我们现有的 ConfigMap 中,然后将其包含在 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"
注意:define 不会产生输出,除非使用模板调用它,如本例所示。
有关templates 的更多信息,您可以阅读this page。