2017-05-06 116 views
1

我正在使用go模板爲kubernetes創建yaml定義。我試圖嵌套模板,但遇到問題,因爲包含時縮進是錯誤的,我無法重新使用定義。也就是說,在一種情況下,內容需要縮進,而不是另一種。我如何控制包含內容的縮進?go模板:如何縮進包含模板的內容

下面的示例。我正在重複使用pod.tmpl,在第一種情況下,它可以按原樣包含在內。在第二種情況下,我需要使它成爲服務

{{ if (eq .Case "pod") 
    # NO indenting 
    {{ template "pod" }} 
{{ end }} 

{{ if (eq .Case "service") 
    service: 
    # need to indent! so contents become members of service: 
    {{ template "pod" }} 
{{ end }} 
+1

爲什麼不使用YAML解析器而不是通用文本模板引擎?在我看來,你在這裏使用的是錯誤的工具。這就是說,如果你不想要空格,那麼......不要鍵入它們? – Carpetsmoker

回答

0

我發現我可以解決的問題,如果我縮進pod.tmpl的內容,然後縮進頂部對齊作爲成員縮進的全部內容下面

{{ if (eq $template "pod.tmpl") }} 
    apiVersion: v1 
    kind: Pod 
{{ end }} 
{{ if (eq $template "deployment.tmpl") }} 
apiVersion: v1 
kind: Deployment 
metadata: 
    name: {{ .Name }}-deployment 
spec: 
    replicas: {{ .Scale }} 
    template: 
{{template "pod" dict "Version" $version "Domain" $domain "Image" $image "ImageDerived" $imageDerived "Service" . }} 
1

你應該能夠管你的模板輸出到indent功能:

{{ if (eq .Case "service") 
    service: 
    # need to indent! so contents become members of service: 
{{ template "pod" | indent 4 }} 
{{ end }}