Helm v3模板嵌套变量不存在时default未回退默认值报错问题
错误原因
default函数仅会在前置表达式完全求值完成且结果为空时才会触发回退逻辑。如果$def.global不存在、或是$def.global.rabbitmq不存在,在求值$def.global.rabbitmq.password的过程中就会触发空指针错误,根本不会走到default分支。
解决方法
方案1:使用Helm内置dig函数(推荐)
dig是Helm v3原生支持的安全嵌套取值函数,多层键不存在时会直接返回预设的默认值,不会抛出空指针错误。修改secrets.yaml中密码取值的行即可:
rabbitmq-password: {{ dig "global" "rabbitmq" "password" $def.RABBITMQ_PASSWORD $def | b64enc | quote }}
参数按顺序为:嵌套键名、兜底默认值、取值目标对象。
方案2:分层取值加默认空字典(兼容旧版本写法)
如果需要兼容非常旧的Helm版本,可以分层对每一级做空值兜底,把空值转为空字典避免后续取值报错:
rabbitmq-password: {{ ((($def.global | default dict).rabbitmq | default dict).password | default $def.RABBITMQ_PASSWORD) | b64enc | quote }}
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

