参考ページ
- 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 実行ができることを知りましたので、ノートしました。
以上です。