[Vagrant & VirtualBox] Chef: Vagrant から Chef でプロビジョニングする

前回の続き。
vagrant up で実行されるように設定します。

Contents

Project init

前回の復習をかねて、プロジェクトの作成から始めます。

% knife solo init zend
% cd zend
% vagrant init chef/centos-6.5

これでひな型が作成されました。
あわせて .gitignore に .vagrant を追記しておきました。

vagrant-omnibus をインストールする

プロビジョニングのためには、Vagrant box にも chef がインストールされている必要がありました。
ちなみに chef がインストールされていないと下記のエラーが出ます。

The chef binary (either `chef-solo` or `chef-client`) was not found on
the VM and is required for chef provisioning. Please verify that chef
is installed and that the binary is available on the PATH.

前回、knife solo prepare コマンドで box へ chef を手動インストールしていましたが、vagrant plugin で自動化します。

インストール

プラグインがインストールされていなければ、インストールします。

% vagrant plugin install vagrant-omnibus

設定

Vagrantfile に下記を追記します。

Vagrantfile
  config.omnibus.chef_version = :latest

ただし、バージョンコントロールしておいた方が良さそうです。

Cookbook を作成する

前回同様、vim をインストールする Cookbook を作成します。

% knife cookbook create zend -o site-cookbooks
site-cookbooks/zend/recipes/default.rb
package "vim-enhanced" do
  action :install
end
nodes/zend.json
{
  "run_list": [
    "recipe[zend]"
  ]
}

ただし実行した限りでは nodes/zend.json を見ていませんでしたので不要かもしれません。
(削除しても動作します)。

このようなファイル構成となりました。

.
├── Vagrantfile
├── cookbooks
├── data_bags
├── environments
├── nodes
│   └── zend.json
├── roles
└── site-cookbooks
    └── zend
        ├── CHANGELOG.md
        ├── README.md
        ├── attributes
        ├── definitions
        ├── files
        │   └── default
        ├── libraries
        ├── metadata.rb
        ├── providers
        ├── recipes
        │   └── default.rb
        ├── resources
        └── templates
            └── default

プロビジョニングとして登録する

前回、knife solo cook コマンドで実行していたプロビジョニングを vagrant up 時に実行されるように設定を加えます。
Vagrantfile を修正します。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "chef/centos-6.5"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.omnibus.chef_version = :latest
  config.vm.provision "chef_solo" do |chef|
    chef.cookbooks_path = "./site-cookbooks"
    chef.add_recipe "zend"
  end
end

以上で完成しました。

vagrant up でプロビジョニングが実行されるようになりました。