我正在编写一个 Helm 3 库图表,并希望创建一个具有默认值的 YAML。但是,当尝试设置默认值时nestedkey 不存在,Helm 失败并显示以下错误消息:
nil pointer evaluating interface {}
假设我的 Kubernetes 对象中有以下代码片段:
{{- if eq (.Values.deployment.scale.type | default "static") "static" }}
replicas: {{ default "3" .Values.deployment.scale.replicas }}
{{- end }}
If .Values.deployment.scale
定义后,模板将呈现良好,并且值replicas
将会是 3 即使.Values.deployment.scale.replicas
没有定义。
但是,如果未定义父键之一,Helm 将失败并显示上述错误消息。例如如果values.yaml
如下:
# values.yaml
deployment:
not_scale: {}
渲染将失败并显示:nil pointer evaluating interface {}.scale
即使其父键未定义,如何为嵌套键设置默认值?
我不认为,你可以为这种情况设置默认值。您需要预先检查是否scale
字段存在。为此,您可以使用hasKey小枝的功能 https://github.com/Masterminds/sprig/blob/bd7cb37b66a3bf86016d09188a371c36e5a63f21/docs/dicts.md:
{{- if hasKey .Values.deployment "scale" }}
{{- if eq (.Values.deployment.scale.type | default "static") "static" }}
replicas: {{ default "3" .Values.deployment.scale.replicas }}
{{- end }}
{{- else }}
replicas: 3
{{- end }}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)