[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 に下記を追記します。
config.omnibus.chef_version = :latest
ただし、バージョンコントロールしておいた方が良さそうです。
Cookbook を作成する
前回同様、vim をインストールする Cookbook を作成します。
% knife cookbook create zend -o site-cookbooks
package "vim-enhanced" do
action :install
end
{
"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_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
でプロビジョニングが実行されるようになりました。