1
0

More than 1 year has passed since last update.

【ルール説明・basic】jinja

Last updated at Posted at 2023-01-06

こちらの記事は Ansible lint Advent Calendar 2022 カレンダー2 9日目の記事になります。

今回はルール jinja について説明します。

jinja

jinja は Ansible コンテンツで jinja2 テンプレートが利用されている時にテンプレートの記述に違反がないか検証します。

現在のところ次のような項目が検証されます。

jinja[spacing]

{{var_name|filter}}のように変数と演算子(フィルタを含む)の間に空白がない場合、エラーが出力されます。Ansible では{{ var_name | filter }}のように記述します。

jinja[invalid]

"{{ & }}"のようにテンプレートの記述が妥当でない場合、エラーが出力されます。Ansible では"{{ '&' }}"のように記述します。

問題のあるコード

---
- name: Example playbook
  gather_facts: false
  hosts: all
  vars:
    bar: "{{ & }}" # <- 記号がエスケープされていない
    dict: "{name:Ansible, github:https://github.com/ansible/ansible}" # <- key と value の間にスペースがない
    foo: "{{ dict|dict2items(key_name='name', value_name='github') }}" # <- 演算子との間にスペースがない
  tasks:
    - name: Debug 1
      ansible.builtin.debug:
        var: bar

    - name: Debug 2
      ansible.builtin.debug:
        var: foo

修正されたコード

---
- name: Example playbook
  gather_facts: false
  hosts: all
  vars:
    bar: "{{ '&' }}" # <- 記号はエスケーブする
    dict: "{ name: Ansible, github: https://github.com/ansible/ansible }" # <- key と value の間にスペースを入れる
    foo: "{{ dict | dict2items(key_name='name', value_name='github') }}" # <- 演算子にスペースを入れる
  tasks:
    - name: Debug 1
      ansible.builtin.debug:
        var: bar

    - name: Debug 2
      ansible.builtin.debug:
        var: foo

その他

現在のところ jinja には次のような制限があります。

  • 改行がある Jinja2 ブロックは検証されない。
  • チルダを二項演算子として使用する Jinja2 ブロックは検証されない。例 {{a ~ b }}
  • 数字にドット記法を使用する Jinja2 ブロックは検証されない。例 {{ foo.0.bar }}

jinja により Ansible コンテンツでのテンプレートの記述の不具合をすべて検出できるわけではありません。しかし最終的には Ansible 実行時にエラーになり処理が停止されるためテンプレートの記述の不具合がコンテンツに存在しても問題にならないかとは思われます。

参考サイト

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0