はじめに
Ansibleを書いてる時に完璧にしたいけど、やっぱり途中で手動オペレーション入っちゃう、、みたいな時がもしかしたらあるかもしれません!でもいちいち途中でplaybook変更なんてしたくない!
そんな時にplaybookに書いておくけど普段は実行しないというやり方があるのです!
実行環境
- ansible 2.5以上
どうするのか?
https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html
今回使うのはAnsibleのTag機能を使います。
ただ、少し特別なタグである never
を使用します。
このタグをつけておくと、何もタグを指定せず実行してもこの never
をつけているタスクは実行されません。
それはPlaybookで指定しても同じことで、Playbookのroleにつけて実行するようにします。
書き方 & 実行方法
書き方
書き方はいたってシンプルです!
---
- hosts: all
become: yes
roles:
- role: hoge
- role: fuga
上記のようなPlaybookで fuga
はtagを指定しない場合では実行して欲しくない時はこのようにします。
---
- hosts: all
become: yes
roles:
- role: hoge
- role: fuga
+ tags: [never, fuga]
これでOKです!!!
実行方法
実行する時はこのようにします。
実行したいrole | 実行するコマンド |
---|---|
hoge | ansible-playbook -i inventories/hoge playbook.yml |
fuga |
ansible-playbook -i inventories/hoge playbook.yml --tags "fuga" or --tags "never"
|
このような形でtagを指定しなければ fuga
は実行されず、明示的に never
もしくは fuga
を指定することで実行されるようになります。
never
と逆に always
というtagもあります。競合した場合はどうなるかとか試してないです!!
おわりに
この書き方はAnsibleで一気に全部実行!!で実現が難しい時や、一時的に書く時に良いかもしれません。
あまり多用すると初めてみた人が「なんでこのrole or task実行されないの!?」となることが予想されるので気をつけてください。
そういう点ではReadme等に実行手順をしっかり書いておく、などの考慮をしておくと幸せになれるかも!