头盔:“模板”关键字

All*_*uaA 5 kubernetes kubernetes-helm

有人可以向我解释一下关键字“template”在这段代码中的作用吗:

apiVersion: v1
kind: Secret
metadata:
  name: {{ template "identity-openidconnect" . }}
  namespace: {{ .Release.Namespace }}
  labels:
    app: {{ template "microService.name" . }}
    release: "{{ .Release.Name }}"
    xxxx
xxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

Mik*_*iak 6

关键字“template”的意思是,Helm会找到之前创建的模板,并根据模板中的模板完成yaml文件。它必须提前创建。这种类型的构造允许您多次引用相同的方案。

例如,我们可以定义一个模板来封装 Kubernetes 标签块:

{{- define "mychart.labels" }}
  labels:
    generator: helm
    date: {{ now | htmlDate }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

现在我们可以将此模板嵌入到现有的 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 }}
Run Code Online (Sandbox Code Playgroud)

当模板引擎读取该文件时,它将存储对 mychart.labels until 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"
Run Code Online (Sandbox Code Playgroud)

注意: define 除非使用模板调用 a,否则不会产生输出,如本例所示。

有关更多信息,templates您可以阅读此页面