VagrantとChef-Soloで仮想マシンを起動する
Vagrant と chef-solo を連携させて、仮想マシンを起動させてみました。
構成管理ツールと連携させることで、開発環境の構築・設定を自動化することができます。
また、chef の cookbook(recipe) をローカルでテストすることができます。
仮想マシンの起動から chef-solo 実行までの流れ
以下のような流れになります。(たぶん)
- 仮想マシンの生成・起動
- ネットワークの設定
- ポートフォワード etc...
- 共有フォルダの設定
- VirtualBox Guest Additions の共有フォルダ機能
- ホスト上の Vagrantfile のあるディレクトリが、仮想OSの /vagrant にマウントされる
- chef-sole の実行
- Vagrantfile に chef-solo 実行を設定する
上記のような流れになるので、ホスト側で Vagrantfile のあるディレクトリに cookbook を作成して、仮想マシンと共有するような形となります。
共有フォルダ機能を利用するので、VirualBox と同じバージョンの VBoxGuestAdditions が仮想マシン側にインストールされている必要があります。
環境
- ホスト
- OS X (10.8.2)
- VirtualBox(4.2.6)
- 仮想マシン
今回は 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 一発で環境を構築することができます。