首页 > 解决方案 > Helm 库图表返回无法评估 []interface {} 类型中的字段值

问题描述

我正在关注 Helm 文档中的 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 语句来启用或禁用特定资源。在此示例中,它是一个 configmap,但它可以是 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 -}}

where.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 字段?这似乎是一个范围界定问题,但我无法解决它。

标签: kuberneteskubernetes-helm

解决方案


我已经在自己的设置上对其进行了测试,看起来您没有在lib Chart.

将其放在文件的开头:

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

同样在您的情况下,您lib Chart对此一无所知Values-它是由app Chart侧面定义的。此外,所有条件都应放在app Chartnot中lib Chart

架构:

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

请参阅部分:依赖项 -> 条件:(可选)

在你的情况下:

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

推荐阅读