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

如何在Helm嵌套Range中访问父级Range的Values值?

解决Helm模板嵌套Range访问外部变量问题

在Helm模板的嵌套Range场景中,内部Range的上下文(.)会覆盖外部上下文,导致无法直接访问外部Range的属性。你可以通过定义命名变量的方式解决这个问题,具体实现如下:

修改后的模板代码

方式一:保留原有with块,新增外部变量

receivers:
{{- if .Values.emailReceivers }}
{{- with .Values.emailReceivers }}
{{- range $receiver := . }}
- name: {{ .name }}
  emailConfigs:
  {{- range .targets }}
  - to: {{ . }}
    text: {{ $receiver.text }}
    sendResolved: {{ $receiver.sendResolved }}
  {{- end }}
{{- end }}
{{- end }}

方式二:简化结构,明确命名所有变量

receivers:
{{- range $receiver := .Values.emailReceivers }}
- name: {{ $receiver.name }}
  emailConfigs:
  {{- range $target := $receiver.targets }}
  - to: {{ $target }}
    text: {{ $receiver.text }}
    sendResolved: {{ $receiver.sendResolved }}
  {{- end }}
{{- end }}

核心原理

Helm模板中,以$开头的变量属于全局作用域变量,在嵌套代码块中不会被上下文覆盖。我们在外部Range中把当前遍历到的接收器对象赋值给$receiver,这样在内部遍历targets的Range里,即使.已经变成单个邮箱地址,依然可以通过$receiver访问到外部接收器的text和sendResolved属性。

验证输出

使用上述模板生成的内容会完全符合预期:

receivers:
- name: 'receiver 1'
  emailConfigs:
  - to: 'mail1@example.com'
    text: 'exampletext 1'
    sendResolved: true
  - to: 'mail2@example.com'
    text: 'exampletext 1'
    sendResolved: true
- name: 'receiver 2'
  emailConfigs:
  - to: 'mail3@example.com'
    text: 'exampletext 2'
    sendResolved: false
  - to: 'mail4@example.com'
    text: 'exampletext 2'
    sendResolved: false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 15:26:22