はじめに
Playbook には、Play 単位、Task 単位など様々な単位でタグを付けることができます。タグを付けることで、Playbook 実行時に指定したタグが付いたタスクのみ実行する、といった制御ができるようになります。
タグを活用していくと「このタグを指定した時にどのタスクが実行されるのか、事前に確認したい」と思うことはないでしょうか。
ansible-playbook
コマンドの --list-tasks
オプションを併用することで確認できます。
この記事で簡単なサンプルで検証します。
- 検証環境
- ansible 2.10.3
- ansible-base 2.10.3
※注: inlcude_role
などの include
系で読み込んだ先のタスクは、性質上 --list-tasks
では表示されません。(Comparing includes and imports: dynamic and static re-use)
Playbook
タグ a
や b
を付けた3つのタスクがある Playbook です。
--- - hosts: all gather_facts: false tasks: - name: task1 debug: msg: task1 tags: - a - name: task2 debug: msg: task2 tags: - a - b - name: task3 debug: msg: task3 tags: - b
-t
と --list-tasks
の併用 で事前確認
タグ a
を指定することで実行されるタスクを、--list-tasks
で事前に確認します。
$ ansible-playbook -i localhost, tags.yml -t a --list-tasks playbook: tags.yml play #1 (all): all TAGS: [] tasks: task1 TAGS: [a] task2 TAGS: [a, b]
タグ a
が付いた task1
と task2
が表示されました。タグ a
が付いてない task3
は表示されません。
実際に Playbook 実行
一応、--list-tasks
オプションを外して実際に Playbook を実行して確認します。
$ ansible-playbook -i localhost, tags.yml -t a PLAY [all] ********************************************************************************************************* TASK [task1] ******************************************************************************************************* "msg": "task1" } TASK [task2] ******************************************************************************************************* ok: [localhost] => { "msg": "task2" } PLAY RECAP ********************************************************************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
--list-tasks
で確認した通り、task1
と task2
が実行されました。
おわりに
どのタスクが実行されるか予想できないようなタグの付け方は避けるべきですが、それでも事前に書くにできるのは便利かなと思います。
参考
[2021/03/24 追記]