访问 Helm 中嵌套范围中的父范围值

问题描述 投票:0回答:1

我有一个舵图,我尝试在其中生成“目标”列表,其中每个目标都有不同的接收者但具有通用的配置。这本质上意味着我有嵌套范围,其中内部范围需要访问外部范围中的值。不幸的是,我无法正确地将值从外部范围传递到内部范围。

假设我有以下价值结构:

emailReceivers:
- name: 'receiver 1'
  targets:
    - '[email protected]'
    - '[email protected]'
  text: exampletext 1
  sendResolved: true
- name: 'receiver 2'
  targets:
    - '[email protected]'
    - '[email protected]'
  text: exampletext 2
  sendResolved: false

以及我的模板中的以下片段:

receivers:
{{- if .Values.emailReceivers }}
{{- with .Values.emailReceivers }}
{{- range . }}
- name: {{ .name }}
  emailConfigs:
  {{- range .targets }}
  - to: {{ . }}
    text: <needs to come from outer range>
    sendResolved: <needs to come from outer range>
  {{- end }}
{{- end }}
{{- end }}

我想要达到获得以下输出的状态:

receivers:
- name: 'receiver 1'
  emailConfigs:
  - to: '[email protected]'
    text: 'exampletext 1'
    sendResolved: true
  - to: '[email protected]'
    text: 'exampletext 1'
    sendResolved: true
- name: 'receiver 2'
  emailConfigs:
  - to: '[email protected]'
    text: 'exampletext 2'
    sendResolved: false
  - to: '[email protected]'
    text: 'exampletext 2'
    sendResolved: false

我可以生成生成的结构,但我不知道如何从嵌套范围访问

text
sendResolved
值或如何将其传递到范围中。我觉得这是一件微不足道的事情,但到目前为止还没有运气..我怎样才能实现这一目标? 谢谢!

kubernetes kubernetes-helm go-templates
1个回答
0
投票

您可以将当前

range
项分配给非
.
变量。 Go 文本/模板语言 为此有特定的语法

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

因此请注意赋值

range $name := expression
,以及嵌套循环内部对外部
$receiver
变量的引用。当前
range
项仍分配给
.
,因此当您不在嵌套循环中时,您可以使用
.name
$receiver.name

© www.soinside.com 2019 - 2024. All rights reserved.