helm-chart5瓢湃,模板和訪問文件

提供的一些聲明和使用命名模板段的操作:

define在模板中聲明一個(gè)新的命名模板
template導(dǎo)入一個(gè)命名模板
block 聲明了一種特殊的可填寫模板區(qū)域

首先理张,模板名稱是全局的。如果聲明兩個(gè)具有相同名稱的模板绵患,則最后加載一個(gè)模板是起作用的模板雾叭。由于子chart中的模板與頂級(jí)模板一起編譯,因此注意小心地使用特定chart的名稱來命名模板落蝙。

通用的命名方式是织狐,以chart名稱作為前綴,eg: {{ define "mychart.labels" }}

用define和template聲明,使用模板

示例:

{{/* Generate basic labels */}}
{{- 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 }}

當(dāng)模板引擎讀取該文件時(shí)筏勒,它將存儲(chǔ)引用mychart.labels直到template "mychart.labels"被調(diào)用移迫。然后它將在文件內(nèi)渲染該模板。結(jié)果:

# 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函數(shù)會(huì)有一個(gè)簡(jiǎn)單的文檔塊({{/* ... */}})來描述自己厨埋。

Helm chart通常將這些模板放入partials文件中,通常是_helpers.tpl捐顷〉聪荩 定義和引用的方式不變雨效。

如果這樣定義一個(gè)模板

{{/* Generate basic labels */}}
{{- define "mychart.labels" }}
  labels:
    generator: helm
    version: {{ .Chart.Version }}
{{- end }}

還是這樣引用:

{{- template "mychart.labels" }}

則 version 的值為空,因?yàn)槟0逍枰粋€(gè)上下文:

{{- template "mychart.labels" . }}

把頂層對(duì)象'.'傳遞給模板废赞,即可引用.Release,.Chaert 等徽龟。

include

這是一個(gè)引用模板的函數(shù):

假設(shè)我們定義了一個(gè)這樣的模板:

{{- define "mychart.app" -}}
app_name: {{ .Chart.Name }}
app_version: "{{ .Chart.Version }}+{{ .Release.Time.Seconds }}"
{{- end -}}

并且正常引用:

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

結(jié)果會(huì)有縮進(jìn)錯(cuò)誤:

# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: measly-whippet-configmap
  labels:
    app_name: mychart
app_version: "0.1.0+1478129847" 0Φ兀縮進(jìn)錯(cuò)誤
data:
  myvalue: "Hello World"
  drink: "coffee"
  food: "pizza"
  app_name: mychart
app_version: "0.1.0+1478129847"【莼凇#縮進(jìn)錯(cuò)誤

因?yàn)閠emplate的數(shù)據(jù)只是內(nèi)嵌插入耘沼,是一個(gè)‘動(dòng)作’屠尊,而非‘函數(shù)’,即不能通過管道傳遞給其他函數(shù)耕拷,來進(jìn)行格式化讼昆。

include 配合 indent 可以解決這個(gè)問題。

{{ include "mychart.app" . | indent 4 }}
引用 mychart.app 且每一行縮進(jìn)4字符

上面的示例可以改為

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

文件訪問

Helm通過.Files對(duì)象提供對(duì)文件的訪問骚烧,例如Files.Get是一個(gè)按名稱獲取文件的函數(shù)(.Files.Get config.ini)浸赫。下面是幾個(gè)要注意的點(diǎn):

向Helm chart添加額外的文件是可以的。這些文件將被捆綁并發(fā)送給Tiller赃绊。不過要注意既峡,由于Kubernetes對(duì)象的存儲(chǔ)限制,chart必須小于1M碧查。
通常出于安全原因运敢,某些文件不能通過.Files對(duì)象訪問。

templates/下的文件忠售。
使用.helmignore排除的文件不能被訪問传惠。

示例:

首先創(chuàng)建三個(gè)文件

config1.toml:
    message = Hello from config 1
    
config2.toml:
    message = This is config 2

config3.toml:
     message = Goodbye from config 3

然后,用一個(gè)range函數(shù)來遍歷它們并將它們的內(nèi)容注入到ConfigMap中稻扬。

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  {{- $files := .Files }}
  {{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
  {{ . }}: |-
    {{ $files.Get . }}
  {{- end }}

其結(jié)果如下:

# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: quieting-giraf-configmap
data:
  config1.toml: |-
    message = Hello from config 1

  config2.toml: |-
    message = This is config 2

  config3.toml: |-
    message = Goodbye from config 3

Glob 函數(shù)

Glob是一個(gè)可以一次獲取多個(gè)文件的函數(shù)卦方。

假設(shè)這樣的一個(gè)目錄結(jié)構(gòu):
foo/:
  foo.txt 
  foo.yaml

bar/:
  bar.go 
  bar.conf 
  baz.yaml

則可以這樣引用文件:

{{ $root := . }}
{{ range $path, $bytes := .Files.Glob "**.yaml" }}
{{ $path }}: |-
{{ $root.Files.Get $path }}
{{ end }}

或者這樣:

{{ range $path, $bytes := .Files.Glob "foo/*" }}
{{ $path.base }}: '{{ $root.Files.Get $path | b64enc }}' L┘眩∨慰场b64enc 是base64編碼函數(shù)。
{{ end }}

有時(shí)候想要將文件內(nèi)容放到configmap里逝她,則可以用Glob ,ConfigMap和Secrets配合實(shí)現(xiàn):

apiVersion: v1
kind: ConfigMap
metadata:
  name: conf
data:
{{ (.Files.Glob "foo/*").AsConfig | indent 2 }}
---
apiVersion: v1
kind: Secret
metadata:
  name: very-secret
type: Opaque
data:
{{ (.Files.Glob "bar/*").AsSecrets | indent 2 }}

按行獲取文件:

data:
  some-file.txt: {{ range .Files.Lines "foo/bar.txt" }}
    {{ . }}{{ end }}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末浇坐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子黔宛,更是在濱河造成了極大的恐慌近刘,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異跌宛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)积仗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門疆拘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寂曹,你說我怎么就攤上這事哎迄。” “怎么了隆圆?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵漱挚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我渺氧,道長(zhǎng)旨涝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任侣背,我火速辦了婚禮白华,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贩耐。我一直安慰自己弧腥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布潮太。 她就那樣靜靜地躺著管搪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铡买。 梳的紋絲不亂的頭發(fā)上更鲁,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音奇钞,去河邊找鬼岁经。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蛇券,可吹牛的內(nèi)容都是我干的缀壤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼纠亚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼塘慕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蒂胞,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤图呢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛤织,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赴叹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了指蚜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乞巧。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖摊鸡,靈堂內(nèi)的尸體忽然破棺而出绽媒,到底是詐尸還是另有隱情,我是刑警寧澤免猾,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布是辕,位于F島的核電站,受9級(jí)特大地震影響猎提,放射性物質(zhì)發(fā)生泄漏获三。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一锨苏、第九天 我趴在偏房一處隱蔽的房頂上張望石窑。 院中可真熱鬧,春花似錦蚓炬、人聲如沸松逊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽经宏。三九已至,卻和暖如春驯击,著一層夾襖步出監(jiān)牢的瞬間烁兰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工徊都, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沪斟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓暇矫,卻偏偏與公主長(zhǎng)得像主之,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子李根,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容