ansible-playbook
にはTagsという機能があり、実行時に指定することで特定のタスクを実行しないようにしたり、実行させるようにしたりできます。
このTags、どう指定するとどう動くのかややこしい部分があるので、まとめることにしました。
原典: https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html
まとめ
- 実行時にタグ未指定の場合(=
all
指定の場合)はnever
以外のすべてのタスクが動く。 - タグ指定時には、そのタグが指定されているタスクのみが動く。
- 実行時に
untagged
を指定すると、タグが指定されていないすべてのタスクが動く。 - 実行時に
tagged
を指定すると、never
タグが指定されていない、タグが指定されているすべてのタスクが動く。
実行時パラメータとタグ指定のマッピング
行がansible-playbook
で--tags
で指定するパラメータ。
列がタスクについているタグです。oが実行されるタスクで、xは実行されないタスクです。
未指定 | foo | foo,bar | always(※) | never(※) | debug | never,debug | |
---|---|---|---|---|---|---|---|
未指定 | o | o | o | o | x | o | x |
foo | x | o | o | o | x | x | x |
bar | x | x | o | o | x | x | x |
never(※) | x | x | x | o | o | x | o |
debug | x | x | x | o | x | o | o |
untagged(※) | o | x | x | o | x | x | x |
tagged(※) | x | o | o | o | x | o | x |
all(※) | o | o | o | o | x | o | x |
all,never | o | o | o | o | o | o | o |
--skip-tags=foo | o | x | x | o | x | o | x |
--skip-tags=always | o | o | o | x | x | o | x |
※: Ansibleの仕様で定められている特殊なタグ。
たとえば、ansible-playbook --tags bar
でPlaybookを実行した場合(3行目)に動くタスクは
-
foo
とbar
が両方ついたタスク(3列目) -
always
がついたタスク(4列目)
で、動かないタスクは
- タグ未指定(1列目)
-
never
だけがついたタスク(5列目) -
debug
だけがついたタスク(6列目) -
never
とdebug
がついたタスク(7列目)
です。
おまけ
ansible-playbook site.yml --list-tags
のように--list-tags
を付けるとPlaybook内で使われているタグがほぼ出力されます。
never
と同時にしか使っていない場合など、出力されないケースがあることは覚えておく必要があります。
後からタグを洗い出すのは若干辛いので、Tagsを使うPlaybookを作る場合は絶対に、絶対にドキュメント化しましょう。