如何在Helm Range循环中使用Include语句?解决Values字段报错
问题解决:Helm range循环中include语句的正确用法
错误原因
你遇到的can't evaluate field Values in type string错误,核心原因是调用include时未传递正确上下文:
- 在
range .Values.tests循环内,当前的.指向循环的单个元素(即某个host字符串) - 默认情况下
include会继承当前.作为模板上下文,导致模板里的.Values试图从字符串类型变量中取值,触发报错
修复方案
调用include时显式传递根上下文$(Helm中$始终指向最顶层上下文,包含Values、Release等全局变量):
修改test.yaml中的include语句:
spec: rules: {{- range .Values.tests }} - host: {{ . }} http: paths: - backend: service: name: test-{{ $.Values.somename }} port: number: {{- include "testit.get_port" $ }} # 传递$作为模板上下文 path: / pathType: ImplementationSpecific {{- end }}
_helper.tpl无需修改,此时模板内的.已指向根上下文,.Values.somtest可正常访问:
{{- define "testit.get_port" }} {{- if (eq .Values.somtest "test1") }}5000{{- else }}80{{- end }} {{- end }}
补充说明
如果模板仅需用到Values,也可以直接传递$.Values作为上下文,此时模板需调整为直接访问字段:
- 调用语句:
{{- include "testit.get_port" $.Values }} - 模板修改:
{{- define "testit.get_port" }} {{- if (eq .somtest "test1") }}5000{{- else }}80{{- end }} {{- end }}
这种方式更精准,但传递$的通用性更强,适合模板需要访问多个全局变量的场景。
内容的提问来源于stack exchange,提问作者user18230166
相关产品推荐
相关产品推荐

