【发布时间】:2020-09-30 01:57:21
【问题描述】:
我有 values.yml 文件,其中包含具有这种格式和默认值的端口列表:
Ports:
- number: 443
protocol: http
输出端口列表用作我的输入的脚本给了我这种格式:
port_list=$(./get_ports.sh)
输出:
- 80
- 8080
我希望生成的渲染模板是
Ports:
- number: 80
- number: 8080
我将如何做到这一点?我在我的模板文件中尝试了以下内容:
{{- with .Values.Ports }}
Ports:
{{- toYaml . | nindent 8 }}
{{- end }}
使用 helm 模板并设置 values.Ports=$port_list,它最终给了我一个管道和一个额外的破折号,如下所示,我不知道它们来自哪里,我如何根据输入?
Ports:
|-
- number: 80
- number: 8080
作为奖励,如果未指定协议,我还希望在我的端口列表中有一个默认协议。
Ports:
- number: 80
protocol: http
- number: 8080
protocol: http
有没有一种只用模板来做到这一点的干净方法?
【问题讨论】:
-
你的get_ports.sh可以输出其他格式吗?例如
a, b, c -
尝试从
{{- toYaml . [...]中删除-,并尝试使用indent而不是nindent -
我知道我来晚了,但我强烈建议反对使用
toYaml,因为这意味着你突然不得不关心缩进。鉴于 YAML 是 JSON 的超集,最好只使用Ports: {{ toJson . }}代替。您将获得所需的结果,而不必担心空格或格式问题。 -
非常感谢@Mr.Llama,它现在可以与 {{ toJson .}} 一起使用,正如您所说,我将获得所需的结果,而不必担心空格或格式问题。
标签: kubernetes yaml kubernetes-helm