Helm模板编写if条件判断时报unclosed action错误如何解决
问题排查与解决方法
核心报错原因
你遇到的unclosed action报错是由模板语法错误直接导致的,具体问题点如下:
- 条件判断语法错误:你将
if关键字写在了Helm模板动作({{ }})外部,还额外用双引号包裹了eq判断语句,导致Helm无法识别这是一条条件控制指令,反而将内部的{{-识别为未闭合的模板动作。 - JSON结构不规范:现有模板中存在多处多余逗号,渲染完成后会生成不合法的JSON结构,即使解决模板语法问题也会触发后续报错。
- 分支键名不一致:两个分支下的键名一个是
xxxx一个是xxx,如果是笔误也会导致生成不符合预期的配置。
修复方案
1. 修正模板语法
调整if条件的写法,将控制逻辑全部放在模板动作内部,同时清理多余的引号和逗号,修正后的JSON模板参考如下:
{ "default_project": "{{ .Values.ss_api_ob }}", "roaming": { "xxx": "false", "xxx": "xxx.json", "xxx": "xx.json", "xxx": "xxx.json", "xxx": "correspondences.json", {{- if eq .Values.myvar "es" -}} "xxxx": [[ "xxx", "xxx" ], [ "xxx", "xx" ], [ "xx", "xxxx" ], [ "xx", "xx" ]], {{- else -}} "xxxx": [[ "yyy", "yyy" ], [ "yyy", "yyy" ], [ "yyy", "yyy" ]], {{- end -}} "xxxx": "http://{{ .Values.kongService }}:9800/xxxx", "xxx": "http://{{ .Values.kongService }}:9800/xxxxx", "xxxx": "http://{{ .Values.kongService }}:9800/xxxx" } }
注:这里统一了两个分支的键名为xxxx,如果原设计就是不同键名可自行改回,同时删除了所有多余的尾部逗号。
2. 本地预校验
修改完成后先执行本地渲染命令验证语法正确性:
helm template <你的chart目录名>
确认输出的JSON结构合法,没有语法报错后再执行helm install操作。
3. 可选排查步骤
如果仍有报错,可以逐行注释模板内容,定位具体出错的行;渲染完成后的JSON内容也可以用JSON校验工具检查格式合法性。
内容的提问来源于stack exchange,提问作者hache cheche
相关产品推荐
相关产品推荐

