如何在任何缩进级别放置带有多行输出的 go-template 操作?

How can I place go-template actions with multi-line output at any indentation level?

我们正在使用 go-templates 创建 yaml。在它们中,我们有需要在特定缩进级别缩进的多行输出操作。我们可以为此使用 indent 函数,但它不会区别对待第一行,因此要求操作定义没有缩进级别。

例如:

foo:
  bar:
    baz:
{{ myYamlOutputtingAction | indent 6 }} # <-- notice 0 indent level

有没有一种方法可以将我的操作定义放在对模板上下文有意义的缩进级别?

更新:小枝 2.13.0+

只是 nindent 而不是 indentsprig library 包含此用例的函数。

上面的相同代码可以写成:

foo:
  bar:
    baz:
      {{ myYamlOutputtingAction | nindent 6 }}

2.13.0

之前小枝版本的旧答案

你可以改变这个:

foo:
  bar:
    baz:
{{ myYamlOutputtingAction | indent 6 }} # <-- notice 0 indent level

为此:

foo:
  bar:
    baz:
      {{- "\n"}}{{ myYamlOutputtingAction | indent 6 }} # <-- properly indented with a little bit fluff

一点解释

这通过确保 {{- "\n"}} 之后的任何内容具有 0 缩进来实现。这意味着您可以在任何有意义的时候用一个 hacky {{- "\n"}} 来换取适当的缩进。我们普遍认为这是值得的。