カテゴリー
コンピューター

Vagrant の ansible_local で tags オプションを有効活用する

参考ページ

具体的に行ったこと

  • site.yml の roles モジュールに tags を設定する。
  • Vagrantfile に tag 実行を設定する。
  • vagrant up --provisionvagrant 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 --provisionvagrant provision は今まで通り実行する。

Vagrantfile に実行するタグを記述しましたので、vagrant コマンド実行時にオプションなどを追加する必要はありませんでした。

おわりに

Ansible プレイブックを作っているとき、今までは冪等性が保たれているのだからプレイブックすべてを実行していました。

もちろん問題はないのですが、プレイブックによっては時間が数分かかってしまいます。

そこで、プレイブックの一部だけを実行したいと思うようになりました。

タグを付けることによって Ansible プレイブックの一部のみを実行できることは以前から知っていました。ただ、Vagrant から指定できることは知りませんでした。

今回、少し調べてみたところ、タグしていしての vagrant 実行ができることを知りましたので、ノートしました。

以上です。

コメントを残す