虽然 Ansible 本身有触发自定义错误的方法,但我找不到 Jinja 类似的东西。
我当前的方法使用语法错误:
{% if 'ansible_mounts' in hostvars[host] %}
# {{ host }} knows its mount-points
{% else %}
# {% error!! No ansible_mounts listed for host - fact-gathering must've failed %}
{% endif %}
但是这些在运行时渲染效果很差——需要查看模板文件并搜索错误(渲染甚至不包括行号!)。
有没有办法从 Jinja-template 中输出简洁的失败消息?
评论中的回答:
没有简单的方法可以做到这一点——只能通过自定义插件。有关详细信息,请参阅:https ://stackoverflow.com/questions/21778252/how-to-raise-an-exception-in-a-jinja2-macro
Ansible 将强制过滤器添加到 Jinja,可用于执行此操作:
给出失败:
(替换
condition_ok
为您需要进行的检查;如果不应该替换,则可以。'OK text'
)''
我写了一个 jinja2 扩展- jinja2_error来引发错误。
首先,
如果你将它与 ansible 一起使用
如果你在 jinja2 环境中使用它
如果您想了解详细信息,请访问
https://github.com/mumubin/jiaja2_error
对于那些寻找类似强制过滤器但不使用 ansible 的人