You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:05:23