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

如何在Helm模板函数中同时访问全局值与range作用域变量?

解决Helm模板中自定义函数同时访问全局与Range变量的问题

问题核心

你使用merge $ $value合并上下文时,Helm的merge函数会原地修改第一个参数(根对象$),导致循环后续迭代时根对象已被之前的$value污染,输出重复内容。

可行解决方案

1. 复制根对象后再合并(推荐)

使用Helm的deepCopy函数先创建根对象的独立副本,再将当前$value合并到副本中,既保留全局变量的标准引用语法,又不会修改原根对象:

myFunc: {{- include "myFunc" (merge (deepCopy $) $value) }}

在myFunc中,你可以直接用:

  • .Values.global.* 访问全局值
  • .fieldOne/.fieldTwo 访问当前Range循环的变量

如果需要让$value的字段覆盖根对象中同名字段(若存在),改用mergeOverwrite:

myFunc: {{- include "myFunc" (mergeOverwrite (deepCopy $) $value) }}

注:deepCopy函数要求Helm 3.5及以上版本。

2. 手动构造全局上下文副本(适配旧Helm版本)

若无法升级Helm,可手动复制全局核心字段到新字典,再合并$value:

myFunc: {{- include "myFunc" (merge (dict "Values" $.Values "Release" $.Release "Chart" $.Chart) $value) }}

这种方式需要手动列举所有需要保留的全局上下文字段,不如deepCopy简洁。

3. 传递双上下文(需修改函数引用语法)

如果可以接受调整函数内的变量引用方式,可传递包含全局和当前变量的字典:

myFunc: {{- include "myFunc" (dict "global" $ "current" $value) }}

在myFunc中对应修改引用:

# 全局值
{{ .global.Values.global.someKey }}
# 当前Range变量
{{ .current.fieldOne }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:25:18