为 helm 值添加单引号

Kin*_*ing 5 yaml kubernetes kubernetes-helm

在 helm 的 values.yaml 文件中,我试图用引号创建一个值,但是当我运行它时,它给出了不同的结果

值.yaml

annotation: '"ports": {"88":"sandbox-backendconfig"}}'

{{ .Values.annotation }}
Run Code Online (Sandbox Code Playgroud)

当我进行空运行时显示什么

"ports": {"88":"sandbox-backendconfig"}}
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它周围的单引号也显示出来

SHC*_*SHC 15

检查下面的方法,

值.yaml

annotation: '"ports": {"88":"sandbox-backendconfig"}}'
Run Code Online (Sandbox Code Playgroud)

模板

{{ .Values.annotation | squote }}
Run Code Online (Sandbox Code Playgroud)

这应该可以解决您的问题。

squote将在推导出的值周围加上单引号。


Dav*_*aze 10

当 Helm YAML 解析器读入values.yaml文件时,它发现 的值annotation:是一个单引号字符串,因此它保留了没有外引号的值的内容。

正如 YAML 规范所建议的,您可以通过将引号加倍来在单引号字符串中包含单引号。将其设为双引号字符串并使用反斜杠转义可能更熟悉。第三种可能性是将它变成一个块 scalar,这会将值放在单独的行上,但根本不需要任何转义。

annotation: '''"ports": {"88":"sandbox-backendconfig"}}'''
annotation: "'\"ports\": {\"88\":\"sandbox-backendconfig\"}}'"
annotation: >-
  '"ports": {"88":"sandbox-backendconfig"}}'
Run Code Online (Sandbox Code Playgroud)

我不确定您要在什么上下文中使用它,但如果这是一种更结构化的格式,您可以使用 HelmtoYamltoJson函数为您构建注释值。

# values.yaml
ports:
  '88': sandbox-backendconfig
Run Code Online (Sandbox Code Playgroud)
# templates/some-resource.yaml
annotations: {{ printf "\"ports\": %s" (toJson .Values.ports) | squote }}
Run Code Online (Sandbox Code Playgroud)