はじめに
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 追記]