YAML 中的二维数组

2D array in YAML

我有一个属性为 2darrayIPs 的舵图。此属性从 values.yaml 文件中获取值,该文件又通过 helm 安装命令

给出

helm-chart/templates/main.yaml

2darrayIPs: {{ .Values.2darrayIPs }}

helm-chart/values.yaml

2darrayIPs: [[]]  -- empty array, this value is given via installation command

我在安装 helm chart 时通过 helm 命令传递二维数组。

helm install ..... -f val.yaml

val.yaml

2darrayIPs:
  - - 1.1.1.1
    - 2.2.2.2
  - - 3.3.3.3
    - 4.4.4.4

我在安装 helm chart 时遇到此错误:

Error: YAML parse error on templates/main.yaml: error converting YAML to JSON: yaml: did not find expected ',' or ']'

如果我给出一个如下所示的数组,则安装成功,但在我的日志中我得到一个只有一个值而不是两个值的数组:

[[1.1.1.1 2.2.2.2]]

val.yaml

2darrayIPs:
  - - 1.1.1.1
    - 2.2.2.2

我哪里错了?

这是有效的 yaml。如果可能,您应该针对此处使用的 yaml 解析器的存储库提出问题。同时,Yaml 是 JSON 的超集,因此您可以使用普通 JSON 二维数组:

2darrayIPs: [["1.1.1.1","2.2.2.2"]]

如果你的模板试图写出比简单字符串更复杂的东西,默认的 {{ .Values.name }} 序列化是 Go-native 的东西,并不是特别有用。 Helm 包含一个 toJson 模板函数,还有一个未记录的 toYaml,可以将这些写成更有用的格式。

# as an array of arrays, in JSON syntax
2darrayIPs: {{ .Values.2darrayIPs | toJson }}
# as an array of arrays, in expanded YAML syntax
# (identical to the previous, but `helm template` output will be
# easier to read)
2darrayIPs: {{- .Values.2darrayIPs | toYaml | nindent 2 }}
# as a YAML-encoded string; for example in a ConfigMap
2darrayIPs: |-
{{ .Values.2darrayIPs | toYaml | indent 2 }}