参考ページ
- Ansibleでタグを使ってみる – Qiita
- Common Ansible Options – Provisioning – Vagrant by HashiCorp
- Tags — Ansible Documentation
具体的に行ったこと
- site.yml の roles モジュールに tags を設定する。
- Vagrantfile に tag 実行を設定する。
vagrant up --provisionやvagrant provisionは今まで通り実行する。
プレイブックの一部分のみを実行できるようになるため、デバッグがより効率的になります!
以前投稿した 【Ansible】【Vagrant】デバッグしながらプレイブックを作るときに使っているテクニック – oki2a24 と合わせるとより効率化できると思います。
site.yml の roles モジュールに tags を設定
今までは、 roles の要素指定に common などを直に書いていましたが、tags を使用するために、role も記述するようにしました。
具体的には、次のようにしました。
---
- name: Install and configure the basic package
hosts: all
become: true
roles:
- role: common
tags: common
- role: sdkman
tags: sdkman
- role: grails
tags: grails
- role: postgres
tags: postgres
- role: phppgadmin
tags: phppgadmin
- role: vim
tags: vim
Vagrantfile に tag 実行を設定
次のようにすることで、指定した tag のみを実行できるようになりました。
ansible.tags = "vim"
全体像は次のようになりました。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "oki2a24/centos-7-x86_64"
config.vm.network "private_network", ip: "192.168.56.11"
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "ansible/site.yml"
ansible.tags = "vim"
end
config.vm.provider "virtualbox" do |v|
v.memory = 1024
end
end
vagrant up --provision や vagrant provision は今まで通り実行する。
Vagrantfile に実行するタグを記述しましたので、vagrant コマンド実行時にオプションなどを追加する必要はありませんでした。
おわりに
Ansible プレイブックを作っているとき、今までは冪等性が保たれているのだからプレイブックすべてを実行していました。
もちろん問題はないのですが、プレイブックによっては時間が数分かかってしまいます。
そこで、プレイブックの一部だけを実行したいと思うようになりました。
タグを付けることによって Ansible プレイブックの一部のみを実行できることは以前から知っていました。ただ、Vagrant から指定できることは知りませんでした。
今回、少し調べてみたところ、タグしていしての vagrant 実行ができることを知りましたので、ノートしました。
以上です。
