Go 舵图失败,带“;零指针求值接口{}”;尝试计算缺少的嵌套键时
我正在编写一个Helm 3库图表,并希望创建一个带有默认值的YAML。但是,当尝试为不存在的嵌套键设置默认值时,Helm失败,并显示以下错误消息:Go 舵图失败,带“;零指针求值接口{}”;尝试计算缺少的嵌套键时,go,kubernetes-helm,sprig-template-functions,Go,Kubernetes Helm,Sprig Template Functions,我正在编写一个Helm 3库图表,并希望创建一个带有默认值的YAML。但是,当尝试为不存在的嵌套键设置默认值时,Helm失败,并显示以下错误消息: nil指针求值接口{} 假设我的Kubernetes对象中有这个片段: {-if eq(.Values.deployment.scale.type |默认为“static”)“static”} 副本:{{default“3”.Values.deployment.scale.replications} {{-end} 如果定义了.Values.dep
nil指针求值接口{}
假设我的Kubernetes对象中有这个片段:
{-if eq(.Values.deployment.scale.type |默认为“static”)“static”}
副本:{{default“3”.Values.deployment.scale.replications}
{{-end}
如果定义了.Values.deployment.scale
,则即使未定义.Values.deployment.scale.replications
,模板也将呈现良好,并且副本的值将为3
但是,如果未定义其中一个父键,Helm将失败并显示上述错误消息。例如,如果values.yaml
如下所示:
#values.yaml
部署:
非比例:{}
渲染将失败:nil指针求值接口{}.scale
即使嵌套键的父键未定义,如何为其设置默认值呢?我不认为,您可以为这种情况设置默认值。您需要预先检查scale
字段是否存在。为此,您可以使用:
我决定使用层次结构的逐步评估来解决这个问题,如果键不存在,则使用default dict
分配一个空映射。它既有效又看起来更好
例如:
{{$deployment:=default dict.Values.deployment}
{{$scale:=默认dict$deployment.scale}
{{-if eq($scale.type |默认为“static”)“static”}
副本:{default“3”$scale.replications}
{{-end}
{{- 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 }}