【Ansible】複数taskをまとめてループ
はじめに
Ansibleでwith_itemsを使って、
複数のtaskをまとめてループさせるPlaybookの書き方をメモしておきます。
こんなイメージです。
動作確認環境
- Ansible:2.8.5
複数taskをループするPlaybookの書き方
includeを使って、
ループする複数taskを書いたplaybookを呼び出す方法で実現しました。
呼ぶ側のPlaybook
- site.yml
--- - hosts: all tasks: - name: call loop tasks include: loop.yml with_items: - "loop01" - "loop02" - "loop03"
呼ばれる側のPlaybook
- loop.yml
--- - block: - name: called task01 debug: msg: "{{ item }}" - name: called task02 debug: msg: "{{ item }}" - name: called task03 debug: msg: "{{ item }}"
複数taskはblock
でくくって書きます。
1回目のループはitem="loop01"でloop.ymlが実行、
2回目のループはitem="loop02"でloop.ymlが実行、
3回目のループはitem="loop03"でloop.ymlが実行される、
といった感じです。
実行ログ
こんな感じになります。
# ansible-playbook -i "localhost," -c local site.yml PLAY [all] ********************************************************************* TASK [Gathering Facts] ********************************************************* ok: [localhost] TASK [call loop tasks] ********************************************************* included: /root/work/loop.yml for localhost included: /root/work/loop.yml for localhost included: /root/work/loop.yml for localhost TASK [called task01] *********************************************************** ok: [localhost] => { "msg": "loop01" } TASK [called task02] *********************************************************** ok: [localhost] => { "msg": "loop01" } TASK [called task03] *********************************************************** ok: [localhost] => { "msg": "loop01" } TASK [called task01] *********************************************************** ok: [localhost] => { "msg": "loop02" } TASK [called task02] *********************************************************** ok: [localhost] => { "msg": "loop02" } TASK [called task03] *********************************************************** ok: [localhost] => { "msg": "loop02" } TASK [called task01] *********************************************************** ok: [localhost] => { "msg": "loop03" } TASK [called task02] *********************************************************** ok: [localhost] => { "msg": "loop03" } TASK [called task03] *********************************************************** ok: [localhost] => { "msg": "loop03" } PLAY RECAP ********************************************************************* localhost : ok=13 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
まとめ
- 呼ぶ側Playbookは
include: 呼ばれる側Playbook
をwith_items
で回す - 呼ばれる側Playbookはまとめてループさせたい複数タスクを、
block
でくくって記載してあげる
これで実現できます。