Helm -是否有可能在其模板上的列表中添加引号?



假设我正在创建一个helm模板,我希望最终部署能够按照自己的意愿执行命令。对于本例,我将使用usetouch命令。

在我的模板文件中,我会这样写:

templates.yaml
...
foo:
{{- if .Values.foo.command }}
exec:
command: {{ .Values.foo.command }}
{{- end }}
...

然后,我有我的值文件:

values.yaml
...
foo:
command: ["touch", "bar.txt"]
...

当我检查上面的结果模板时,命令被模板化为:

foo:
exec:
command: [touch bar.txt]

因此,它的命令中没有引号/逗号。这仍然会按预期执行吗?还是需要逗号和引号来执行?

谢谢!

这不会像预期的那样工作。您显示的输出语法是一个有效的YAML列表,但只包含一个shell单词,因此它正在查找一个名为touch bar.txt的命令,其中的空格将是/usr/bin中文件名的一部分。

Helm使用的Go文本/模板引擎并不特别了解YAML。当您直接写出这样的值时,它使用的默认格式并不是特别有用。Helm有几个文档较少的扩展,可以用更有用的格式输出值。对于您的示例,我可能会使用:

foo:
{{- with .Values.foo.command }}{{/* like "if", but also rebinds `.` */}}
exec:
command:
{{ toYaml . | indent 6 }}
{{- end }}

应该这样写:

foo:
exec:
command:
- touch
- bar.txt
###### note: 6 spaces here matches `indent 6`

您可以将command: {{ toJson .Values.foo.command }}放入一行中。在任何一种情况下,它都可能没有values.yaml文件中的确切格式,因为Helm在启动时解析YAML,然后写出等效的结构。

相关内容

  • 没有找到相关文章

最新更新