如何在头盔图表中从values.yaml到_helpers.tpl获取值

时间:2019-06-20 05:22:03

标签: yaml kubernetes-helm

这是values.yaml文件。它包含以下内容,当我尝试将其添加到_helper.tpl中时,我会Helm template failed. Error: render error in "windows/templates/ingresses/windows.yaml": template: windows/templates/_helpers.tpl:38:18: executing "windows.certificate" at <.Values.ingress.enab...>: can't evaluate field ingress in type interface {} : exit status 1

values.yaml

ingress:
    enabled: true
    tls: true
    certificate: ''
    issuer:
        name: letsencrypt-staging
    hosts:
        windows:
            - name: ''
            path: /

_helpers.tpl

 {{/*
 Calculate certificate
 */}}
 {{- define "windows.certificate" }}
 {{- printf .Values.ingress.enabled }}  // error line is this. line no 38
 {{- end }}

在windows.yaml中

    - secretName: {{ template "windows.certificate" . }} // calling the helper method.

3 个答案:

答案 0 :(得分:1)

问题是缩进尝试

values.yaml

ingress:
  enabled: true
  tls: true
  certificate: ''
  issuer:
    name: letsencrypt-staging
  hosts:
    windows:
      - name: ''
        path: /

在辅助程序上也进行了一些更改,以控制定义块的输出

_helpers.tpl

 {{/*
 Calculate certificate
 */}}
 {{- define "windows.certificate" }}
 {{- if .Values.ingress.enabled }}
 {{- printf .Values.ingress.certificate }} 
 {{- end }}     
 {{- end }}

答案 1 :(得分:0)

当您调用帮助程序时,上下文可能不是定义所期望的根。

例如,如果您在这样的模板中使用它:

{{- range .Values.deployments }}
  {{ $certificate := include "windows.certificate" . }}
{{- end }}

调用帮助程序时的上下文为 .Values.deployments 。因此, .Values.ingress.certificate 会指向 .Values.deployments.Values.ingress.certificate ,这当然是不存在的。

helm templating guide的变量部分的开头,有一个示例,说明with块如何影响.的含义。阅读它可能有助于您了解如何知道传递给帮助模板的内容。

答案 2 :(得分:0)

针对同样的问题。
就我而言,我必须将文件从 V alues.yaml重命名为 v alues.yaml(注意小写文件名)。