将列表分配给图表中的键
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\?\&\;useSSL=true\&\;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"
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\?\&\;useSSL=true\&\;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"