0

helmfile用来安装我的 Helm 图表和其他依赖关系图表。我想在值文件中使用模板化值。
这个已解决的问题来看,似乎支持值文件中的模板化。但是,我使用以下文件进行了测试 helmfile.yaml

environments:
  default:
    values:
    - my:
        port: 8080
---
repositories:
  - name: incubator
    url: https://kubernetes-charts-incubator.storage.googleapis.com
releases:
- name: haproxy-ingress
  namespace: haproxy-ingress
  chart: incubator/haproxy-ingress
  version: 0.0.27
  values:
  - values.yaml

values.yaml

controller:
  tcp:
    1936: "my_namespace/my-service:{{ .Values.my.port }}"

如果我跑步helmfile template,我会得到

COMBINED OUTPUT:
  Error: template: haproxy-ingress/templates/tcp-configmap.yaml:16:31: executing "haproxy-ingress/templates/tcp-configmap.yaml" at <tpl $value $>: error calling tpl: error during tpl function execution for "my_namespace/my-service:{{ .Values.my.port }}": template: haproxy-ingress/templates/tcp-configmap.yaml:1:34: executing "haproxy-ingress/templates/tcp-configmap.yaml" at <.Values.my.port>: nil pointer evaluating interface {}.port
  Use --debug flag to render out invalid YAML

如果我内联值,它可以工作

environments:
  default:
    values:
    - my:
        port: 8080
---
repositories:
  - name: incubator
    url: https://kubernetes-charts-incubator.storage.googleapis.com
releases:
- name: haproxy-ingress
  namespace: haproxy-ingress
  chart: incubator/haproxy-ingress
  version: 0.0.27
  values:
  - controller:
      tcp:
        1936: "my_namespace/my-service:{{ .Values.my.port }}"
4

1 回答 1

1

我得到了答案。从 helmfile 的文档中,

您可以在 helmfile.yaml 和 values.yaml.gotmpl(模板化 helm 值文件)中使用 go 的文本/模板表达式。values.yaml 引用将被逐字使用。换句话说:对于以 .gotmpl 结尾的值文件,将为纯值文件(以 .yaml 结尾)呈现模板表达式,内容将按原样使用

因此,对于这种情况,values.yaml应该重命名为,values.yaml.gotmpl以便 helmfile 将文件解释为 go 模板。

于 2020-10-08T01:58:57.893 回答