2017-03-16 42 views
0

我有一個k8s資源的通用模板,我想擴展n次(如果您好奇,這樣我可以創建mongo集羣的n個成員,並且他們使用statefulset資源,以便每個成員都擁有穩定的網絡名稱)。kubernetes-helm模板可以使用變量嗎?

很顯然,每次循環都需要不同的值。我正在循環由Sprig「until」函數生成的一系列索引。但是循環的$ index沒有在「。」中設置。命名空間。所以我無法在我的_helpers.tpl文件中引用我定義的模板中的當前迭代。

這裏有一個例子模板瓦特/全K8S資源YAML(我縮寫大部分):

{{- define "mytest" -}} 
--- 
apiVersion: apps/v1beta1 
kind: StatefulSet 
    abbreviated... 
    containers: 
    - name: mongod-$index 
    abbreviated... 
{{- end -}} 

來電者:

{{ range $index, $e := until .Values.mongod_count }} 
    {{include "mytest" .}} 
{{ end}} 

我只是得到:未定義的變量「$指數

{{ $foo := "somevalue" }} 
{{ define "my_extra_labels" }} bla {{ .Values.test }}_{{$foo}}{{end}} 
{{ template "mytest" . }} 
:「

我有塊我(主叫)模板嘗試過,像這樣

這在我_helpers.tpl

{{/* Test stuff */}} 
{{- define "mytest" -}} 
hello: world_how_are_{{ block "my_extra_labels" . }}{{ end }} 
{{- end -}} 

變量$ foo的不是在 「定義」 身體定義。

此模板範圍感受到如此嚴格的限制,目前我看不到如何使用它來解決我目前的情況。

有沒有辦法將變量推入「。」命名空間?如果是這樣(穿過我的手指)有沒有辦法以某種方式合併命名空間,這樣我仍然可以訪問.Values和.Chart變量?

回答

0

helm中的模板無法訪問變量。然而,交給模板的上下文是一本字典。該分支庫可以從Go模板中訪問,並可用於操作字典。

藉此簡化模板:

{{- define "mytest" -}} 
    - name: mongod-{{ .index }} 
{{- end -}} 

現在,您可以把這個模板爲例:

{{ range $index := until 5 }} 
    {{- $p := dict "index" $index }} 
    {{include "mytest" $p}} 
{{- end -}} 

這將輸出:

- name: mongod-0 
- name: mongod-1 
- name: mongod-2 
- name: mongod-3 
- name: mongod-4 

您還可以添加項目現有的或當前有作用域的詞典:

{{- $_ := set . "index" "none" }} 
{{include "mytest" .}} 

$ _用於抑制不需要的輸出,因爲「set」返回新的字典。以上退貨:

- name: mongod-none 

添加到字典中的任何值都將超出通話範圍。如果你想避免污染現有的詞典中,你可以強制的深備份:

{{- $d := merge (dict) . -}} 

任何加到「$ d」將不存在「」

相關問題