如何在 helm chart 中使用命名模板作为 YAML 列表元素?

问题描述 投票:0回答:1

我想使用命名模板作为 YAML 列表的元素。

例如:

我想使用以下模板

{{- define "mytemplate" -}}
name: foo
value: bar
details: baz
{{- end -}}

作为

evenmore
列表的元素:

some:
  more:
    evenmore:
      - name: foo
        value: bar
        details: baz

我尝试将

mytemplate
明确地视为列表元素,方法是将其更改为:

{{- define "mytemplate" -}}
- name: foo
  value: bar
  details: baz
{{- end -}}

但是,如果我想在

merge
和其他一些命名模板上使用
mytemplate
函数,这种方法是不可用的。

我也尝试过使用

list
功能:

spec:
  more:
    evenmore:
      {{- include "mytemplate" . | list | toYaml | indent 6 }}

基于微小的修改,这将给我留下多行字符串作为列表元素或列表元素顶部字段的不匹配缩进。

有没有一种方法可以在不将命名模板修改为列表元素本身的情况下将命名模板用作列表元素?

kubernetes-helm go-templates
1个回答
0
投票
some:
  more:
    evenmore:
      - {{ include "mytemplate" . | indent 8 | trim }}

拆开最后一行:

  1. 调用

    mytemplate
    ,使用当前上下文作为参数,但使用 Helm
    include
    函数将其输出作为字符串。

  2. 每行(包括第一行)缩进 8 个空格。

  3. 修剪掉前导和尾随的空格;从第一行删除缩进。

因此模板输出中的第一行(

name:
)将紧跟在连字符空格 YAML 列表项标记之后;其余行(
value:
details:
)将缩进 8 个空格,其中数字 8 是经过精心选择的,因此它们在输出中排列。

© www.soinside.com 2019 - 2024. All rights reserved.