かべぎわブログ

技術的なことについてかけたらいいな…

Ansibleでタグをつかって特定の処理のみ実行する

今回はAnsibleを利用して特定の処理だけを実行する方法をご紹介します。

playbookのいらないところをコメントアウトしていろいろためして…
みたいなことが不要になります!

概要

taskの中にtagsでタグをつけておいて、ansible-playbookコマンドの実行時に--tagsオプションでそのタグを指定してあげます。
すると、タグをつけた処理だけが実行できます!!!

かんたんな例

かんたんな例です。

playbook

playbookが以下だとします。

echoをファイルをリダイレクトするだけのかんたんなplaybookです。
それぞれtagsでwawawaとsasasaのタグをつけてあげています。

---
- hosts: localhost
  gather_facts: false
  tasks:
   - shell: echo "wawawa" > /home/ec2-user/wawawa.txt
     tags: wawawa

   - shell: echo "sasasa" > /home/ec2-user/sasasa.txt
     tags: sasasa
...

実行コマンド

オプションで--tagsを指定してタグがwawawaのものを実行してみます。

$ ansible-playbook -i ansible_hosts ec2_linux_tag_test.yml --tags wawawa

実行結果確認

標準出力は以下のとおり。

$ ansible-playbook -i ansible_hosts ec2_linux_tag_test.yml --tags wawawa
Using /etc/ansible/ansible.cfg as config file

PLAY [localhost] **************************************************************************************************

TASK [command] ****************************************************************************************************
changed: [localhost] => {"changed": true, "cmd": "echo \"wawawa\" > /home/ec2-user/wawawa.txt", "delta": "0:00:00.002605", "end": "2018-02-21 15:24:50.889019", "rc": 0, "start": "2018-02-21 15:24:50.886414", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

PLAY RECAP ********************************************************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0   

 
wawawa.txtだけが作成されていることがわかります。

$ cat /home/ec2-user/wawawa.txt 
wawawa

$ cat /home/ec2-user/sasasa.txt 
cat: /home/ec2-user/sasasa.txt: No such file or directory

おまけ

タグは以下のように実行コマンドで複数指定することも可能です。
--tags wawawa--tags sasasaを指定してあげています。

$ ansible-playbook -i ansible_hosts ec2_linux_tag_test.yml --tags wawawa --tags sasasa

また、playbook内のタグが一意である必要はないです。
今回の例の場合、両方ともtags: wawawaとしてあげることで両方とも処理が実行されます。  
たとえばplaybookが以下にような場合、両方の処理が実行されます。

$ cat ec2_linux_tag_test.yml
---
- hosts: localhost
  gather_facts: false
  tasks:
   - shell: echo "wawawa" > /home/ec2-user/wawawa.txt
     tags: wawawa

   - shell: echo "sasasa" > /home/ec2-user/sasasa.txt
     tags: wawawa
...

Ansible実践ガイド 第2版

Ansible実践ガイド 第2版