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を作る場合は絶対に、絶対にドキュメント化しましょう。