Helm模板中index函数与if or语句结合使用报错如何解决?
错误原因
Go 模板默认采用前缀式函数调用规则,解析优先级从左到右。你给出的报错代码中,or函数会将后续紧跟的第一个元素index识别为第一个判断参数,没有给index传入任何取值参数,因此触发了「index参数不足」的报错。
同时你需要用index获取的带短横线属性,没有明确的表达式边界,模板无法正确识别index对应的入参列表。
解决方案
将每个用到index的取值表达式用括号()包裹,明确表达式边界,作为or函数的独立参数传入即可。
假设你原代码的判断逻辑是:只要.Values.serviceA.appyml、.Values.serviceB.log4j2xml、serviceC下的some-service-configyml、serviceC下的another-serviceyml四个值任意一个存在就进入判断分支,正确写法如下:
{{- if or .Values.serviceA.appyml .Values.serviceB.log4j2xml (index .Values.serviceC "some-service-configyml") (index .Values.serviceC "another-serviceyml") }}
补充注意事项
- 所有包含特殊字符(短横线、空格、数字开头等)的属性,只要使用
index取值,当需要作为其他函数的参数时,必须把整个index调用表达式用括号包裹 or、and这类逻辑函数的判断条件如果是复合表达式,都建议用括号明确边界,避免模板解析优先级异常
内容的提问来源于stack exchange,提问作者Jesus Vidal
相关产品推荐
相关产品推荐

