将列表分配给图表中的键

时间:2019-02-08 12:16:16

标签: templates kubernetes kubernetes-helm

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"

感觉好像我缺少明显的东西。
林特说:好吧
模板说:

  

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

升级说:

  

错误:升级失败:YAML解析错误   xxx / templates / deployment.yaml:将YAML转换为JSON时发生错误:yaml:   第35行:发现意外的“:”

解决方案:

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

2 个答案:

答案 0 :(得分:2)

当前的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 }}
...

答案 1 :(得分:1)

头盔包括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"