gpt4 book ai didi

go - 如何缩进包含模板的内容

转载 作者:IT王子 更新时间:2023-10-29 01:44:46 31 4
gpt4 key购买 nike

我正在使用 go 模板为 kubernetes 创建 yaml 定义。我正在尝试嵌套模板,但遇到了无法重新使用定义的问题,因为包含时缩进是错误的。即,在一种情况下,内容需要缩进,但在另一种情况下则不需要。如何控制包含内容的缩进?

示例如下。我正在重用 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 }}

最佳答案

@Giovanni Bassi 的回答只适用于 Helm 人。 include 函数在 helm here 中定义.

结合indent from sprig从@tmirks 的回答中,你得到:

func renderTemplate(templatePath string, vars interface{}, out io.Writer) error {
t := template.New(filepath.Base(templatePath))
var funcMap template.FuncMap = map[string]interface{}{}
// copied from: https://github.com/helm/helm/blob/8648ccf5d35d682dcd5f7a9c2082f0aaf071e817/pkg/engine/engine.go#L147-L154
funcMap["include"] = func(name string, data interface{}) (string, error) {
buf := bytes.NewBuffer(nil)
if err := t.ExecuteTemplate(buf, name, data); err != nil {
return "", err
}
return buf.String(), nil
}

t, err := t.Funcs(sprig.TxtFuncMap()).Funcs(funcMap).ParseFiles(templatePath)
if err != nil {
return err
}
err = t.Execute(out, &vars)
if err != nil {
return err
}
return nil
}

然后

{{ include "pod" | indent 4 }}

关于go - 如何缩进包含模板的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43821989/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com