假設我正在創建一個 helm 模板,我希望最終的部署能夠執行他們喜歡的命令。對于此示例,我將使用touch命令。
在我的模板檔案中,我會這樣寫:
templates.yaml
...
foo:
{{- if .Values.foo.command }}
exec:
command: {{ .Values.foo.command }}
{{- end }}
...
然后,我將擁有我的值檔案:
values.yaml
...
foo:
command: ["touch", "bar.txt"]
...
當我檢查上面的結果模板時,命令被模板化為:
foo:
exec:
command: [touch bar.txt]
因此,它的命令中沒有引號/逗號。這仍然會按預期執行嗎?或者是否需要逗號和引號才能執行此操作。
謝謝!
uj5u.com熱心網友回復:
這不會按預期作業。您顯示的輸出語法是一個有效的 YAML 串列,但只包含一個 shell 單詞,因此它正在尋找一個名為 的命令touch bar.txt,其中空格將是/usr/bin.
Helm 使用的 Go 文本/模板引擎并不特別了解 YAML。當您直接寫出這樣的值時,它會使用不是特別有用的默認格式。Helm 有幾個檔案較少的擴展,可以以更有用的格式寫出值。對于您的示例,我可能會使用:
foo:
{{- with .Values.foo.command }}{{/* like "if", but also rebinds `.` */}}
exec:
command:
{{ toYaml . | indent 6 }}
{{- end }}
這應該寫出:
foo:
exec:
command:
- touch
- bar.txt
###### note: 6 spaces here matches `indent 6`
您可能能夠適應command: {{ toJson .Values.foo.command }}單行。在任何一種情況下,它都可能沒有檔案中的確切格式values.yaml,因為 Helm 在啟動時決議 YAML,然后寫出等效的結構。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/497056.html
