将列表分配给图表中的键

Assign list to a key within a chart

Deployment.yaml

...
env: {{ .Values.env}}
...

Values.yaml:

env:
- name: "DELFI_DB_USER"
  value: "yyy"
- name: "DELFI_DB_PASSWORD"
  value: "xxx"
- name: "DELFI_DB_CLASS"
  value: "com.mysql.jdbc.Driver"
- name: "DELFI_DB_URL"
  value: "jdbc:sqlserver://dockersqlserver:1433;databaseName=ddbeta;sendStringParametersAsUnicode=false"

感觉好像遗漏了一些明显的东西。
linter 说:好的
模板说:

env: [map[name:DELFI_DB_USER value:yyy] map[name:DELFI_DB_PASSWORD value:xxx] map[name:DELFI_DB_CLASS value:com.mysql.jdbc.Driver] map[value:jdbc:mysql://dockersqlserver.{{ .Release.Namespace }}.svc.cluster.local:3306/ddbeta\?\&amp\;useSSL=true\&amp\;requireSSL=false name:DELFI_DB_URL]]

升级说:

Error: UPGRADE FAILED: YAML parse error on xxx/templates/deployment.yaml: error converting YAML to JSON: yaml: line 35: found unexpected ':'

解决方案:

env:
{{- range .Values.env }}
- name: {{ .name | quote }}
  value: {{ .value | quote }}
{{- end }}

当前的 Go 模板扩展将给出非 YAML 的输出:

env: {{ .Values.env}}

变成:

env: env: [Some Go type stuff that isn't YAML]...

Helm Go 模板需要遍历源 YAML 字典的键。 Helm docs.

中对此进行了描述

正确的Deployment.yaml是:

...
env:
{{- range .Values.env }}
  - name: {{ .name | quote }}
    value: {{ .value | quote }}
{{- end }}
...

头盔包括undocumented toYaml and toJson template functions;两者都可以在这里工作(因为有效 JSON 是有效的 YAML)。更短的路径可以是

env: {{- .Values.env | toYaml | nindent 2 }}

请注意,您需要小心缩进,尤其是当您要设置不在该列表中的任何其他环境变量时。在此示例中,我要求 Helm 将 YAML 列表缩进多两步,因此其他环境值也需要遵循

env: {{- .Values.env | toYaml | nindent 2 }}
  - name: OTHER_SERVICE_URL
    value: "http://other-service.default.svc.cluster.local"