我有一个舵图,我尝试在其中生成“目标”列表,其中每个目标都有不同的接收者但具有通用的配置。这本质上意味着我有嵌套范围,其中内部范围需要访问外部范围中的值。不幸的是,我无法正确地将值从外部范围传递到内部范围。
假设我有以下价值结构:
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
值或如何将其传递到范围中。我觉得这是一件微不足道的事情,但到目前为止还没有运气..我怎样才能实现这一目标?
谢谢!
您可以将当前
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
。