【问题标题】:Helm library chart returning can't evaluate field Values in type []interface {}Helm 库图表返回无法评估 []interface {} 类型中的字段值
【发布时间】:2020-10-21 03:48:33
【问题描述】:

我正在关注 Helm 文档 here 中的 Helm 库图表示例。

原始示例在库图中有一个通用的ConfigMap,定义如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name | printf "%s-%s" .Chart.Name }}
data: {}
{{- end -}}
{{- define "mylibchart.configmap" -}}
{{- include "mylibchart.util.merge" (append . "mylibchart.configmap.tpl") -}}
{{- end -}}

我正在制作一个图表,该图表需要我使用 if 语句来启用或禁用特定资源。在此示例中,它是一个配置映射,但它可以是一个 HPA 或蓝/绿图表中的部署。

当我添加 If 语句如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name | printf "%s-%s" .Chart.Name }}
data: {}
{{- end -}}
{{- define "mylibchart.configmap" -}}
{{- if .Values.configMapEnabled }}
{{- include "mylibchart.util.merge" (append . "mylibchart.configmap.tpl") -}}
{{- end -}}
{{- end -}}

其中.Values.configMapEnabled 存在于 values.yaml 文件中,并设置为true

其他一切都与文档中的描述保持一致,即我使用一个简单的图表将库图表作为依赖项包含在内,然后运行:

helm install mydemo mychart/ --debug --dry-run

我收到以下错误:

helm.go:84: [debug] template: mychart/templates/configmap.yaml:1:4: executing "mychart/templates/configmap.yaml" at <include "mylibchart.configmap" (list . "mychart.configmap")>: error calling include: template: mychart/charts/mylibchart/templates/_configmap.yaml:9:14: executing "mylibchart.configmap" at <.Values.configMapEnabled>: can't evaluate field Values in type []interface {}

为什么不对 Values 字段进行评估?这似乎是一个范围界定问题,但我无法解决。

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    我已经在自己的设置中对其进行了测试,您似乎没有在 lib Chart 中定义 ConfigMap。

    把它放在文件的开头:

    {{- define "mylibchart.configmap.tpl" -}}
    

    同样,在您的情况下,lib ChartValues 一无所知-它由app Chart 方定义。 此外,所有条件都应放在app Chart 而不是lib Chart

    架构:

    parent/child chart -  chart dependencies, with global switches on/off
    

    参见部分:dependnecies -> condition: (optional)

    在你的情况下:

    $ helm install mydemo mychart/ --debug --dry-run --set configmap.enabled=false
    

    【讨论】:

    • 这不能回答我的问题。我应该指出我使用的是 Helm 3,所以没有 Tiller。我的问题是关于在将图表模板与库模板合并时使用if 语句,而不是直接测试图表模板。 --debug --dry-run 在我测试模板渲染时是故意的。
    • 不是条件语句的问题,而是语法错误-尝试申请.Values.configMap.enabled
    • 不是语法问题,和合并有关。我已经完全按照您的建议进行了尝试,但仍然收到相同的错误。同样为了完整性,如果我将 if 语句添加到行首,我会收到关于 unexpected &lt;define&gt; in command 的错误
    猜你喜欢
    • 2020-11-09
    • 2020-08-12
    • 2019-06-08
    • 2019-11-02
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多