てくなべ (tekunabe)

ansible / network automation / 学習メモ

Jinja2 にコメントを入れる

これは エーピーコミュニケーションズ Advent Calendar 2021 の3日目の記事です。

はじめに

Ansible などで利用されるテンプレートエンジン Jinja2には、コメントのシンタックスが用意されています。

jinja.palletsprojects.com

コメントのシンタックス

{# ここにコメントを入れる #}
{#
ここに
コメントを入れる
#}

複数行まとめてコメントアウトする、というときにも便利そうですね。

おためし

Ansible で試してみます。(環境: Ansible 2.9.19、Jinja2 3.0.1)

Playbook

Playbook は以下の通り。template モジュールでファイルを書き出すだけです。

---
- hosts: localhost
  gather_facts: false
  connection: local

  tasks:
    - name: jinja2 test
      template:
        src: test.j2
        dest: test.txt

パターン1: 1行コメント

Jinja2 テンプレート test.j2 側はいくつかのパターンで試します。

まずは、テキスト内にコメントをいれるパターンです。

111
222
{# ここにコメントを書く #}
333

Playbook を実行して出力されるファイル test.txt は以下のようになります。

111
222
333

コメントを書いた行は、空行にならず無視された形です。

パターン2: インラインコメント

111
222
aa{# bb #}cc
333

はこうなります。

111
222
aacc
333

パターン3: 複数行コメント

テンプレートはこちら。

111
222
{# 
  いろんな
  ことを
  ここにコメントに書く
#}
333

出力先ファイルはこちら。1行のときと同じですね。

111
222
333

パターン4 制御文を複数行コメントアウト

まずコメントアウトしない場合

111
222
{% for i in ["a", "b", "c"] %}
{{ i }}
{% endfor %}
333

では、for文によって、以下のようになります。

111
222
a
b
c
333

これを、for文をまるごとコメントアウト

111
222
{#
{% for i in ["a", "b", "c"] %}
{{ i }}
{% endfor %}
#}
333

すると、以下のようになります。

111
222
333

for文が有効でないことがわかります。

パターン5: Whitespace Control との組み合わせ

- による Whitespace Control との組み合わせもできることを知りました

いくつか試したものを掲載します。

5-1

111
222

{#- ここにコメントを書く #}

333

は以下の通り。

111
222
333

5-2

111
222

{# ここにコメントを書く -#}

333

111
222

333

5-3

111
222
{#- ここにコメントを書く -#}
333

111
222333

5-4

111
222{#- ここにコメントを書く -#}
333

111
222333

おわりに

テンプレート内で for 文などのロジックにちょっとした説明を書いたり、デバッグ時に一時的に処理を無効化しておきたいときに便利そうですね。