在 Helm 中将 YAML 转换为字符串

Gui*_*ume 3 yaml go-templates kubernetes-helm

我有一个 helm 图表,用于部署具有 YAML 格式配置文件的应用程序。目前,我的舵图使用以下代码:

值.yaml

databaseUser: "dbuser"

configFiles:
  db_config_file.yaml: |-
    databaseUser: {{ .Values.databaseUser }}
    databasePort: 1234
    [...]

[...]
Run Code Online (Sandbox Code Playgroud)

模板/configmap.yaml

data:
  {{- range $name, $config := .Values.configFiles }}
  {{ $name }}: |-
{{ tpl $config $ | indent 4 }}
  {{- end }}
Run Code Online (Sandbox Code Playgroud)

这段代码允许我轻松更改databaseUserfrom 值,但问题是如果我想更改 的值databasePort,我必须像这样重写整个配置:

configFiles:
  db_config_file.yaml: |-
    databaseUser: {{ .Values.databaseUser }}
    databasePort: 9876
Run Code Online (Sandbox Code Playgroud)

这很不方便。它的工作原理是这样的,因为db_config_file.yaml内容被解释为字符串,因为我将其提供给tpl仅接受字符串的函数。

所以我的问题是,有没有办法将 YAML 转换为 Helm 模板中的字符串并获得以下内容:

databaseUser: "dbuser"

configFiles:
  db_config_file.yaml: # Content is not a string block
    databaseUser: {{ .Values.databaseUser }}
    databasePort: 1234
    [...]

[...]
Run Code Online (Sandbox Code Playgroud)
data:
  {{- range $name, $config := .Values.configFiles }}
  {{ $name }}: |-
{{ tpl (<a toString function> $config) $ | indent 4 }}
  {{- end }}
Run Code Online (Sandbox Code Playgroud)

小智 6

我能够使用下面的代码解决类似的问题

值.yaml

databaseUser: "dbuser"

configFiles: # Content is not a string block
  db_config_file_yaml: 
    databaseUser: {{ .Values.databaseUser }}
    databasePort: 1234
[...]
Run Code Online (Sandbox Code Playgroud)

模板/configmap.yaml

data:
   db_config_file.yaml: |
{{ .Values.configFiles.db_config_file_yaml | toYaml | indent 4 }}
Run Code Online (Sandbox Code Playgroud)

参考:https ://helm.sh/docs/chart_template_guide/yaml_techniques/#strings-in-yaml