首页 > 解决方案 > Kubernetes Helm 图表,如果条件在数组中

问题描述

我正在尝试更新此图表:

k8s.v1.cni.cncf.io/networks: '[
            { "name" : "ext", "ips": {{ .Values.global.extoamlancas0 | quote }}, "interface": "e1"},
            { "name" : "ext-app", "ips": {{ .Values.global.extapplancas0 | quote }}, "interface": "e3"},
            { "name" : "int-", "ips": {{ .Values.global.intoamlancas0 | quote }}, "interface": "e2"}
         ]'
Here
 if {{- if Values.a }} then I want "ips" to be in an array i.e 
{ "name" : "ext-", "ips": [ {{ .Values.global.extoamlancas0 | quote }} ], "interface": "e1"}

else 
{ "name" : "ext", "ips": {{ .Values.global.extoamlancas0 | quote }}, "interface": "e1"}

我也希望对所有其他 2 个 ip 执行此操作。

标签: kuberneteskubernetes-helm

解决方案


在 values.yaml 文件中,您需要指定一个数组 ips,如下所示:

ips:
  - address: 192.168.1.1
    name: no1

  - address: 192.168.1.2
    name: no2

在模板文件中,您可以像这样循环:

{{- range .Values.ips }}
  - name: {{ .name }}
    address: {{ .address }}
{{- end }}

下面是来自 golang 文档的片段:template - Go | 范围

{{range pipeline}} T1 {{end}} pipeline 的值必须是数组、切片、映射或通道。如果管道的值长度为零,则不输出任何内容;否则,将 dot 设置为数组、切片或映射的连续元素,并执行 T1。如果该值是一个映射并且键是具有定义顺序的基本类型,则将按排序键顺序访问元素。

{{range pipeline}} T1 {{else}} T0 {{end}} pipeline 的值必须是数组、切片、映射或通道。如果管道的值长度为零,点不受影响,执行T0;否则,将 dot 设置为数组、切片或映射的连续元素,并执行 T1。


推荐阅读