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