動機

文件寫得不錯,很好懂

大概過程

template被compile成yaml,之後就kubectl apply -f

結構

templates就是yaml的template value.yml就是放各種資料,用

{{ .parent.item }}

拿 Chart.yml這個helm的訊息 Charts管其他dependencies from 其他chart

語法

取值

{{ .Values.<item> }}

.就是root,後面就是很像物件調用方法,至於有什麼物件看這裡

變數

{{- $relname := .Release.Name -}}
{{- range $key, $val := .Values.favorite }}

pipeline

{{ f a }}
// 變成
{{ a | f }}

消滅空行

{{ if eq .Values.favorite.drink "coffee" }}
    mug: "true"
{{ end }}

會輸出


    mug: "true"

不是不行,但能不能把if的空行消滅掉

{{- if eq .Values.favorite.drink "coffee" }}
    mug: "true"
{{- end }}

會輸出

    mug: "true"

不要在block中縮排

{{- if .... }}
    xyz: 123
{{- end }}
{{- if .... }}
abc: 123
{{- end }}

變成

    xyz: 123
abc: 123

chroot

原本

drink: {{ .Values.favorite.drink | default "tea" | quote }}
food: {{ .Values.favorite.food | upper | quote }}
release: {{ .Values.favorite.Release.Name }}

變成

$來拿到with外面的root (話是說上一層)

{{- with .Values.favorite }}
drink: {{ .drink | default "tea" | quote }}
food: {{ .food | upper | quote }}
release: {{ $.Release.Name }}
{{- end }}

loop

    {{- range .Values.pizzaToppings }}
    - {{ . | title | quote }}
    {{- end }}  

抽象yaml

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

metadata:
  name: {{ .Release.Name }}-configmap
  {{- template "mychart.labels" . }} // 要記得把想要root傳進去

變成

metadata:
  name: {{ .Release.Name }}-configmap
  labels:
    generator: helm
    date: {{ now | htmlDate }}

用include可以控制縮排

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

metadata:
  name: {{ .Release.Name }}-configmap
{{- include "mychart.labels" | indent 4 }}

變成

metadata:
  name: {{ .Release.Name }}-configmap
  labels:
    generator: helm
    date: {{ now | htmlDate }}

local install

helm pull <repo>/<name>會拉tar回來,name-ver.tar

helm可以install by

  • tar
  • folder 但要指定完整檔名,所以如果都拉最新版,tar的ver會無法確認

所以要先untar,他untar後只會有名字 helm pull <repo>/<name> --untar 之後就可以直接指定folder name安裝

How to debug

把生了什麼印出來

helm install --dry-run --disable-openapi-validation <name> ./mychart
helm template .

API

能用的函數在Go template language與Sprig template library

其他有用的

YAML Techniques Debugging Templates Chart Hooks