如何通过 Helm Chart 将字符串列表(切片)呈现为 yaml 文件中的列表

How to render list (slice) of string as list in yaml file by Helm Chart

我有一个字符串数据列表或(切片),例如 [string1, string2, string3]。 我想在 yaml 文件中以列表方式将其呈现为

- string1
- string2
- string3

我该怎么做?

我试过了

{{- range $val := $list }}
  - {{ $val }}
{{- end }}

但它呈现为多行字符串

- |-
   - string1
   - string2
   - string2

有什么想法吗?提前谢谢你

您可以使用格式化字符串输出来解决问题。

例如

values.yaml

arr:
  - string1
  - string2
  - string3

_helpers.tpl

{{/*
Print string from list split by ,
*/}}
{{- define "print.list" -}}
{{- range $idx, $val := $.Values.arr -}}
{{- if $idx }}
{{- print ", "  -}} 
{{- end -}}
{{- $val -}}
{{- end -}}
{{- end -}}

你要渲染的模板,例如comfigmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "test.fullname" . }}
data:
  test: [{{- include "print.list" .}}]

输出

piVersion: v1
kind: ConfigMap
metadata:
  name: test
data:
  test: [string1, string2, string3]

---↓ 2022-01-05更新↓---

values.yaml

arr:
  - string1
  - string2
  - string3

你要渲染的模板,例如comfigmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "test.fullname" . }}
data:
  test: |
    {{- toYaml $.Values.arr | nindent 4 }}

输出

piVersion: v1
kind: ConfigMap
metadata:
  name: test
data:
  test: |
    - string1
    - string2
    - string3

没有管道

helm --dry-run --debug template test .

你要渲染的模板,例如comfigmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "test.fullname" . }}
data:
  test: 
    {{- toYaml $.Values.arr | nindent 4 }}

输出

piVersion: v1
kind: ConfigMap
metadata:
  name: test
data:
  test: 
    - string1
    - string2
    - string3

range

{{- range $i, $v := $.Values.arr }}
- {{ $v }}
{{- end }}

输出

- string1
- string2
- string3