问题描述
我正在编写一个Helm 3库图表,并希望使用默认值创建一个YAML。但是,当尝试为不存在的嵌套键设置默认值时,Helm失败,并显示以下错误消息:
nil pointer evaluating interface {}
假设我的Kubernetes对象中有以下代码片段:
{{- if eq (.Values.deployment.scale.type | default "static") "static" }}
replicas: {{ default "3" .Values.deployment.scale.replicas }}
{{- end }}
如果定义了.Values.deployment.scale
,则即使未定义.Values.deployment.scale.replicas
,模板的渲染效果也会很好,replicas
的值将为3。
values.yaml
如下:
# values.yaml
deployment:
not_scale: {}
呈现将失败,错误为:nil pointer evaluating interface {}.scale
如何为嵌套键设置默认值,即使其父键未定义?
推荐答案
我决定通过逐步评估层次结构并在键不存在时使用default dict
分配一个空映射来解决这个问题。它既可以工作,而且看起来更好。
示例:
{{ $deployment := default dict .Values.deployment }}
{{ $scale := default dict $deployment.scale }}
{{- if eq ($scale.type | default "static") "static" }}
replicas: {{ default "3" $scale.replicas }}
{{- end }}