LoginSignup
7
5

More than 3 years have passed since last update.

ansible-playbookで特定のroleだけ実行したい

Posted at

はじめに

Ansibleを書いてる時に完璧にしたいけど、やっぱり途中で手動オペレーション入っちゃう、、みたいな時がもしかしたらあるかもしれません!でもいちいち途中でplaybook変更なんてしたくない!

そんな時にplaybookに書いておくけど普段は実行しないというやり方があるのです!

実行環境

  • ansible 2.5以上

どうするのか?

https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html
今回使うのはAnsibleのTag機能を使います。
ただ、少し特別なタグである never を使用します。
このタグをつけておくと、何もタグを指定せず実行してもこの never をつけているタスクは実行されません。

それはPlaybookで指定しても同じことで、Playbookのroleにつけて実行するようにします。

書き方 & 実行方法

書き方

書き方はいたってシンプルです!

plyabook.yml
---
- hosts: all
  become: yes
  roles:
    - role: hoge
    - role: fuga

上記のようなPlaybookで fuga はtagを指定しない場合では実行して欲しくない時はこのようにします。

plyabook.yml
---
- 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等に実行手順をしっかり書いておく、などの考慮をしておくと幸せになれるかも!

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5