はじめに
Ansible には、Play や Task にタグをつけて、実行を制御する機能があります。
ansible-playboo コマンドの --tags または -t オプションでタグを指定すると、指定したタグがついた Play や Task のみを実行できます。
逆に、--skip-tags オプションでは、実行しないように制御できます。
これらは組み合わせたときの挙動(被ったときは --skip-tags が優先)について、簡単なサンプルで示します。
サンプル Playbook
task1 と task2 に a というタグが、task2 と task3 に b というタグがついています。
- hosts: localhost gather_facts: false connection: local tasks: - name: task1 debug: msg: task1 tags: - a - name: task2 debug: msg: task2 tags: - a - b - name: task3 debug: msg: task3 tags: - b
実行
普通に実行すると、すべてのタスクが実行されます。
ここでは --tags a --skip-tags b という指定をして実行します。
$ ansible-playbook -i localhost, tag_test.yml --tags a --skip-tags b PLAY [localhost] *************************************************************************************************** TASK [task1] ******************************************************************************************************* ok: [localhost] => { "msg": "task1" } PLAY RECAP ********************************************************************************************************* localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
task1 のみが実行されました。task2 はタグ a がついているものの、b もついているので、--skip-tags b という指定によってスキップされました。
つまり、被ったときは --skip-tags が優先されるということになります。
なお、実際に実行せずとも、--list-tasks オプションを利用すると、実行されるタスクの表示だけされます。
$ ansible-playbook -i localhost, tag_test.yml --tags a --skip-tags b --list-tasks
playbook: tag_test.yml
play #1 (localhost): localhost TAGS: []
tasks:
task1 TAGS: [a]
参考
[2021/03/24 追記]