■ はじめに
Ansible というより、Jinja2 の機能ですが for
によるループの中で、今何番目のループであるかを示すループインデックスなどの特殊な変数を利用できます。
例
変数名 | 値 |
---|---|
loop.index |
1 から始まるインデックス |
loop.index0 |
0 から始まるインデックス |
loop.irevindex |
後ろから数えるインデックス(5要素ある場合は5から) |
loop.first |
最初のループであれば True 、それ以外は False |
loop.last |
最後のループであれば True 、それ以外は False |
この記事では簡単な例で動作を確認します。
[2019/08/20 追記] Ansible 2.8 で Ansible の「Extended loop variables」という機能として実装されました。
動作確認環境
- Ansible 2.7.8
- CentOS 7.6 (Ansible 側、管理対象ホスト側とも)
■ 準備
Jiinja2 テンプレート
- test.j2
{% for u in users %} # {{ u }} - index: {{ loop.index }} - index0: {{ loop.index0 }} - revindex: {{ loop.revindex}} - first: {{ loop.first}} - last: {{ loop.last}} {% endfor %}
Playbook
テンプレート test.j2
の内容をもとにして test.txt
を生成します。ここでは、変数はvars
ディレクティブで指定したものが利用されます。
- test.yml
- hosts: localhost gather_facts: no tasks: - name: loop test template: src: test.j2 dest: test.txt vars: users: - kingyo - koi - funa - tanago - oikawa
■ 実行
$ ansible-playbook -i inventory test.yml PLAY [localhost] ********************************************************* TASK [loop test] ********************************************************* ok: [localhost] PLAY RECAP ************************************************************* localhost : ok=1 changed=0 unreachable=0 failed=0
- test.txt
生成したファイルの内容です。各種変数の内容が確認できます。
# kingyo - index: 1 - index0: 0 - revindex: 5 - first: True - last: False # koi - index: 2 - index0: 1 - revindex: 4 - first: False - last: False # funa - index: 3 - index0: 2 - revindex: 3 - first: False - last: False # tanago - index: 4 - index0: 3 - revindex: 2 - first: False - last: False # oikawa - index: 5 - index0: 4 - revindex: 1 - first: False - last: True
■ まとめ
Jinja2 テンプレートのループの中で、ループインデックスなどの特殊な変数を確認しました。
その他の loop.*
変数については Jinja2 のドキュメントを参照してください。
なお、これらの変数は Ansilbe 徹底入門をきっかけに知りました。
- 作者: 廣川英寿,平初,橋本直哉,森田邦裕,渡辺一宏
- 出版社/メーカー: 翔泳社
- 発売日: 2017/02/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る