带 2 个变量的头盔系列

use*_*908 5 go-templates kubernetes kubernetes-helm

我正在尝试在 helm 中使用一个范围的循环,但使用 2 个变量,我所拥有的..

值.yaml

master:
  slave1: 
    - slave1value1
    - slave1value2
  slave2: 
    - slave2value1
    - slave2value2
Run Code Online (Sandbox Code Playgroud)

我的实际循环。

{{- range  .Values.master.slave1 }}
        name: http://slave1-{{ . }}
{{- end }}
{{- range  .Values.master.slave2 }}
        name: http://slave2-{{ . }}
{{- end }}

Run Code Online (Sandbox Code Playgroud)

这实际上是在做我需要的事情,输出将是这样的......

循环播放.Values.master.slave1

name: http://slave1-slave1value1
name: http://slave1-slave1value2
Run Code Online (Sandbox Code Playgroud)

循环播放.Values.master.slave2

name: http://slave2-slave1value1
name: http://slave2-slave1value2
Run Code Online (Sandbox Code Playgroud)

目前这完全有效,问题是,我可以仅使用一个循环块来实现相同的结果吗?我试过这个。

{{ alias := .Values.master }}
{{- range  $alias }}
        name: http://{{ . }}-{{ $alias.name }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

但输出不是我所期望的,提前感谢。

Dav*_*aze 4

几乎......你需要一个嵌套循环来做到这一点。顶层数据结构是一个映射,其中键是工作人员名称,值是值列表。因此,您可以迭代顶级映射,然后针对每个项目迭代值列表。

{{- $key, $values := range .Values.master -}}
{{- $value := range $values -}}
name: http://{{ $key }}-{{ $value }}
{{ end -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)

请注意,我们已将 的值分配range给局部变量,以避免确切含义出现一些歧义.(在每个range循环内,对于当前最内层的循环,它将是迭代器)。