检查数组是否包含属性等于特定值的对象

时间:2019-08-15 10:34:21

标签: kubernetes-helm go-templates

我有一个头盔values.yaml文件,其中包含以下内容:

env:
  - name: VAR_1
    value: VALUE_1
  - name: VAR_2
    value: VALUE_2

在掌舵图中,我想要一个if,用于检查.Values.env是否包含带有name=VAR_1的物品。

我尝试使用{{ if has "VAR_1" .Values.env }},但不确定如何进行对象比较,或将.Values.env插值到.Values.env[].name(类似于jq)。

1 个答案:

答案 0 :(得分:0)

您需要使用Looping with the range actionIf/Else

您还可以使用uniq function删除重复项,但是相同的name和不同的value将被视为唯一。

{{- range .Values.env | uniq -}}
  {{- if eq .name "VAR_1" -}}
    {{ .name }}: {{ .value }}
  {{- end }}
{{- end}}

更新

这是一个 hacky _helpers.tpl 函数,该函数仅输出首次出现的名称为“ VAR_1”的元素

{{- define "chart.getUniqueValue" -}}

  {{- $myDict := dict }}
  {{- $searchKey := "VAR_1" }}

  {{- range .Values.env  | reverse}}
    {{- $_ := set $myDict .name .value }}
  {{- end }}

  {{- range $k, $v := $myDict }}
    {{- if eq $searchKey $k}}
      {{- $k }} : {{ $v }}
    {{- end }}
  {{- end }}

{{- end -}}