VagrantとChef-Soloで仮想マシンを起動する

Vagrant と chef-solo を連携させて、仮想マシンを起動させてみました。
構成管理ツールと連携させることで、開発環境の構築・設定を自動化することができます。
また、chef の cookbook(recipe) をローカルでテストすることができます。

仮想マシンの起動から chef-solo 実行までの流れ

以下のような流れになります。(たぶん)

  1. 仮想マシンの生成・起動
  2. ネットワークの設定
    • ポートフォワード etc...
  3. 共有フォルダの設定
    • VirtualBox Guest Additions の共有フォルダ機能
    • ホスト上の Vagrantfile のあるディレクトリが、仮想OSの /vagrant にマウントされる
  4. chef-sole の実行
    • Vagrantfile に chef-solo 実行を設定する

上記のような流れになるので、ホスト側で Vagrantfile のあるディレクトリに cookbook を作成して、仮想マシンと共有するような形となります。
共有フォルダ機能を利用するので、VirualBox と同じバージョンの VBoxGuestAdditions が仮想マシン側にインストールされている必要があります。

環境

今回は chef を使って、仮想マシンに /tmp/chef-sample.txt を作成してみました。

chef のインストール

cookbook の作成に knife コマンドを使用するので、ホスト側に chef をインストールします。

$ gem install chef --no-ri --no-rdoc

cookbook の作成

Vagrantfile のあるディレクトリに cookbook の雛形を作成します。

$ cd ~/work/vagrant/centos(Vagrantfile のあるディレクトリ)
$ knife cookbook create test -o ./cookbooks
** Creating cookbook test
** Creating README for cookbook: test
** Creating CHANGELOG for cookbook: test
** Creating metadata for cookbook: test

cookbooks/test/recipes/default.rb に追記します。

$ vi cookbooks/test/recipes/default.rb
template "/tmp/chef-sample.txt" do
    source "chef-sample.txt.erb"
    mode 0644
end

cookbooks/test/templates/default に chef-sample.txt.erb を作成します。

$ vi cookbooks/test/templates/default/chef-sample.txt.erb
CPU    : <%= node[:cpu][:"0"][:model_name] %>
Memory : <%= node[:memory][:total] %>
OS     : <%= node[:platform] %> <%= node[:platform_version] %>

chef-solo の設定

Vagrantfile に chef-solo の設定を追記します。

$ cd ~/work/vagrant/centos(Vagrantfile のあるディレクトリ)
$ vi Vagrantfile
Vagrant::Config.run do |config|
  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "./cookbooks"
    chef.add_recipe "test"
  end
end

仮想マシンの起動

$ cd ~/work/vagrant/centos(Vagrantfile のあるディレクトリ)
$ vagrant up

/tmp/chef-sample.txt の確認

仮想マシンにログインして、/tmp/chef-sample.txt を確認します。

$ ssh -p 2222 vagrant@localhost
$ cat /tmp/chef-sample.txt
CPU    : Intel(R) Core(TM) i7-3667U CPU @ 2.00GHz
Memory : 502568kB
OS     : centos 6.3


パッケージインストールなどの recipe を追加していけば、vagrant up 一発で環境を構築することができます。