Ansible自体には カスタムエラーをトリガーする方法 がありますが、Jinjaに似たものは見つかりません。
私の現在の方法は、syntaxエラーを使用します。
{% 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テンプレート内からきちんとした失敗メッセージを出力する方法はありますか?
コメントからの回答:
これを達成する簡単な方法はありません-カスタムプラグインを介してのみ。詳細は以下を参照してください: https://stackoverflow.com/questions/21778252/how-to-raise-an-exception-in-a-jinja2-macro
エラーを発生させるために、jinja2拡張機能--- jinja2_error を作成しました。
まず、
pip install jinja2_error
Ansibleで使用する場合
ANSIBLE_JINJA2_EXTENSIONS=jinja2_error.ErrorExtension ansible-playbook site.yml -v
Jinja2環境で使用する場合
from jinja2 import Environment
from jinja2_error import jinja2_error
if __name__ == '__main__':
env = Environment(extensions=[jinja2_error.ErrorExtension])
render_text = """
{% if 1==1 %}
{% error "It's error" %}
{% endif %}
"""
template = env.from_string(render_text)
result = template.render({"a": "b"})
詳細を知りたい方はアクセスしてください