Helm Go Template中has函数匹配失效,如何修复以输出a:42?
问题原因
你误用了Helm Sprig函数库中的has函数——这个函数的作用是检查某个值是否是map的键,而非判断数组中是否包含某个元素。你的.Values.xs是数组类型,所以has 1 .Values.xs始终返回false,导致模板执行了else分支。
修复方案
要判断数组中是否包含指定元素,可使用Sprig的any函数结合eq表达式,只要数组中有任意一个元素满足等式条件就返回true。
修复后的values.yaml代码:
{{if (any (eq 1) .Values.xs)}} a: 42 {{ else }} b: 1 c: 2 {{ end }}
也可以用更显式的写法(效果完全一致):
{{if (any (func $v) (eq $v 1) .Values.xs)}} a: 42 {{ else }} b: 1 c: 2 {{ end }}
验证结果
当你的template.yaml中xs包含1时,模板会输出:
a: 42
内容的提问来源于stack exchange,提问作者Kevin Meredith
相关产品推荐
相关产品推荐

