如何检查头盔模板中不存在的字典值?

How to check for a non-existent dictionary value within a helm template?

在我的值配置文件中,我有一个字典数组,如下所示:

    connects_to
     - name: myname
       release: optional release
     - name: another name

请注意,将始终提供名称,但发布版本可能会也可能不会。在我的模板中,我有:

    {{- if .Values.connects_to }}
        app.openshift.io/connects-to: '
    {{- range .Values.connects_to -}}
    {{- if .release -}}  
        {{- .release -}}-{{- .name -}},
    {{- else -}}
        {{- $.Release.Name -}}-{{- .name -}},
    {{- end -}}
    {{- end -}}
    '
    {{- end }}

给出错误:

    can't evaluate field release in type interface {}

我也试过使用“hasKey”如下:

    {{- if .Values.connects_to }}
        app.openshift.io/connects-to: '
    {{- range .Values.connects_to -}}
    {{- if hasKey . "release" -}}  
        {{- .release -}}-{{- .name -}},
    {{- else -}}
        {{- $.Release.Name -}}-{{- .name -}},
    {{- end -}}
    {{- end -}}
    '
    {{- end }}

给出错误:

    wrong type for value; expected map[string]interface {}; got string

如何在不必每次都为“release”指定值的情况下完成此检查?我的头盔版本:

    version.BuildInfo{Version:"v3.2.3+4.el8", GitCommit:"2160a65177049990d1b76efc67cb1a9fd21909b1", GitTreeState:"clean", GoVersion:"go1.13.4"}

这实际上适用于“hasKey”方法,值定义中存在错误。

对于寻找错误可能原因的人 (wrong type for value; expected map[string]interface {}; got string)。

给定模板

{{- if hasKey .Values.somedict "valueX" -}}
    {{- .Values.somedict.valueX -}}
{{- end -}}

并使用 2 values.yaml(例如:helm template . --values Values1.yaml --values Values2.yaml)。

Values1.yaml:

somedict:
  valueA: 1

Values2.yaml:

# Causes error
somedict:

# Works
somedict: {}

# Leaving out "somedict" also work