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

Helm tpl函数无法传入dict等非根上下文的问题咨询

Helm tpl函数传入自定义dict上下文报错的原因及解决办法

问题场景

作为Helm/Go模板新手,在使用tpl函数时遇到如下问题:

  1. 初始测试:stubs/.test.yaml模板中用{{.Values.key}},通过{{ tpl (.Files.Get "stubs/.test.yaml" ) (.) }}传入根上下文,能正常渲染出test2: value(values.yaml中定义key: value)。
  2. 修改后测试:将模板改为{{.key}},通过{{ tpl (.Files.Get "stubs/.test.yaml" ) (dict "key" .Values.key) }}传入自定义dict作为上下文,触发错误:
    error calling tpl: cannot retrieve Template.Basepath from values inside tpl function: test: abc
    test2: {{.key}}: "BasePath" is not a value
    
  3. 进一步测试发现,只有传入.作为tpl函数的第二个参数才能正常运行,使用版本为Helm 3.10。

原因分析

Helm的tpl函数内部依赖根上下文(.)中包含的Helm自动注入的元数据字段,比如Template.Basepath。当你传入纯自定义的dict作为上下文时,这个字典里没有这些Helm渲染必需的内置元数据,导致tpl函数执行时找不到这些字段,从而抛出错误。

解决办法

  • 方法一:合并自定义数据与根上下文
    使用Helm的merge函数,将你的自定义dict和根上下文合并,这样既保留自定义数据,又不丢失Helm需要的元数据:

    {{ tpl (.Files.Get "stubs/.test.yaml") (merge (dict "key" .Values.key) .) }}
    

    此时模板中用{{.key}}即可正常渲染出对应的值。

  • 方法二:手动添加必要的内置字段(不推荐)
    如果你确定只需要部分元数据,可以手动在自定义dict中添加tpl函数必需的字段,但这种方法会因Helm版本更新导致兼容性问题,不建议生产环境使用:

    {{ tpl (.Files.Get "stubs/.test.yaml") (dict "key" .Values.key "Template" .Template) }}
    

内容的提问来源于stack exchange,提问作者Martin Mucha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:35:40