動機
文件寫得不錯,很好懂
大概過程
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