web-dev-qa-db-ja.com

Jinjaテンプレート内からカスタムエラーをトリガーする方法

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テンプレート内からきちんとした失敗メッセージを出力する方法はありますか?

5
Mikhail T.

コメントからの回答:

これを達成する簡単な方法はありません-カスタムプラグインを介してのみ。詳細は以下を参照してください: https://stackoverflow.com/questions/21778252/how-to-raise-an-exception-in-a-jinja2-macro

3

エラーを発生させるために、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"})

詳細を知りたい方はアクセスしてください

https://github.com/mumubin/jiaja2_error

1
mumubin