【问题标题】:Assign list to a key within a chart将列表分配给图表中的键
【发布时间】:2019-02-09 09:27:13
【问题描述】:

部署.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 值:xxx] 映射[名称:DELFI_DB_CLASS 值:com.mysql.jdbc.Driver] 映射[值:jdbc:mysql://dockersqlserver.{{.Release.Namespace }}.svc.cluster.local:3306/ddbeta\?\&amp\;useSSL=true\&amp\;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 }}

【问题讨论】:

    标签: templates kubernetes kubernetes-helm


    【解决方案1】:

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

    【讨论】:

    • 但我需要将它分配给 env: 键?
    • Go 模板比这更笨,你只是在这里要求它进行查找和替换。扩展模板必须是有效的 YAML。如果您将 --debug 传递给 helm,您应该能够看到完整的扩展 yaml。
    • 好的,但它仍然会从我的问题中产生那个奇怪的东西:[map bla-bla-bla],而不是 yaml
    • 对,看来您需要修复 Go 模板以循环 YAML 键
    • docs.helm.sh/chart_template_guide/…。我已经更新了答案,但我还没有运行它
    【解决方案2】:

    Helm 包括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"
    

    【讨论】:

    • 很奇怪。我试过 toyaml 没用。我会再试一次谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-12-21
    • 2019-01-14
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多