如何合并 helm chart 和 vault agent 模板?

How to merge helm chart and vault agent tempate?

我有两个 helm 图表模板。

{{- define "helpers.config.tpl" -}}
debug: "true"
db:
  app:
    dialect: "mysql"
    endpoint: {{`{{ with secret "` }}{{ default "common/data/mydata" $.Values.vaultSecretName  }}{{`" -}}{{ .Data.data.db }}{{- end }}`}}
{{- end -}}

{{- define "helpers.config" -}}
{{- $default := fromYaml ( include "helpers.config.tpl" . )   -}}
{{- $conf := .Values.configFile -}}
{{- toYaml (merge $conf $default ) }}
{{- end -}}

我也有 values.yaml 如下所示。

configFile:
  db: 
    app:
      conn: 300

我想添加或修改属性,只是通过 values.yaml 文件传递​​值。但是我得到了 Error: 'error converting YAML to JSON: yaml: line 86: did not find expected key' 这样的错误。我该如何解决这个问题?

Vault Agent Template 语法包括一个额外的模板层,由 helpers.config.tpl 生成。如果您使用空 .Values 调用该模板,您将退出

debug: "true"
db:
  app:
    dialect: "mysql"
    endpoint: {{ with secret "common/data/mydata" -}}{{ .Data.data.db }}{{- end }}

不过,这不是有效的 YAML:YAML { ... } 应该是字典语法,而不是 Go 模板语法。您必须强制将此字符串解释为字符串。

可能最可靠的方法是使用 YAML block scalar syntax,缩进您要发出的内容但不应用其他转义:

endpoint: |-
  {{`{{ with secret "` }}{{ default "common/data/mydata" $.Values.vaultSecretName  }}{{`" -}}{{ .Data.data.db }}{{- end }}`}}

感谢@DavidMaze 我解决了这个问题。不过,这有点棘手。我像下面这样形成了我的 yaml 文档。

endpoint: |-
  {{`{{ with secret "`}}{{ default "common/data/mydata" $.Values.vaultSecretName }}{{`" -}}
    {{ .Data.data.db }}
  {{- end }}`}}