Ansible

如何從 Jinja 模板中觸發自定義錯誤?

  • March 18, 2022

雖然 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,可用於執行此操作:

{{ ('OK text' if condition_ok) | mandatory('Text of error message') }}

給出失敗:

fatal: [hostname]: FAILED! => {"msg": "Text of error message"}

(替換condition_ok為您需要進行的檢查;如果不應該替換,則可以。'OK text'''

引用自:https://serverfault.com/questions/871069