Ansible模板渲染报错expected token 'end of statement block'求助
报错触发原因
该报错属于Jinja2模板语法错误,Ansible的配置模板渲染底层基于Jinja2实现,Jinja2的多分支条件判断不支持{% else if %}写法,必须使用{% elif %}作为多分支判断的关键字。
你编写的{% else if %}语法会被模板解析器判定为else对应的语句块已经结束,后续出现的if属于未在合法语句块内的无效标记,因此抛出expected token 'end of statement block', got 'if'的错误。
修复方案
将配置中所有的{% else if %}替换为{% elif %}即可,修复后的配置如下:
abc: "{% if x == 'y' %}1{% elif x == 'z' %}2{% elif z == 'a' %}3{% endif %}"
如果需要提升长条件判断的可读性,也可以使用YAML折叠标量块改写,避免长字符串转义问题:
abc: > {% if x == 'y' %} 1 {% elif x == 'z' %} 2 {% elif z == 'a' %} 3 {% endif %}
内容的提问来源于stack exchange,提问作者akansha
相关产品推荐
相关产品推荐

