簡単!今どきのVagrant+ChefSolo入門(2014年9月版)
最新のVagrant/Chef事情を踏まえて、新しい入門記事が求められている気がしたので書いてみます。
ホスト環境について
Windowsをホストマシンとして使うのは茨の道なのでお勧めしません。たいていのツールはMac向けに作られており、Windows対応はたいてい後回しにされます。
Windowsだけで発生するバグとかエラーもいっぱいあります。
私はWindowsでのBerkshelfのインストールの難しさに嫌気がさして WindowsからMacBook Airに乗り換えました。
VagrantとVirtualBoxをインストール
普通にインストーラでインストールすればOKです。ChefDKをインストール
簡単!MacOSXやLinuxにChef,Knife,Berkshelfを一発でインストールしてくれるChefDKの紹介これ一発で、 Chef,Berkshelf,foodcriticなどcookbook開発に必要なもろもろツールをインストールしてくれます。
(ただし、あくまでホストマシンにこれらが入るだけです。ゲストマシンにChefを入れる作業は別途必要です。後述。)
Vagrant Pluginをインストール
プラグインをやたらめったら入れる必要はないですが、この2つは入れておきましょう。$ vagrant plugin install vagrant-omnibus
$ vagrant plugin install vagrant-vbguest
Vagrant CloudからBoxを探して使う
http://www.vagrantbox.es/ のリストを使ったり vagrant box add するのは古いやり方です。今どきは box add する必要はほとんどありません。
https://vagrantcloud.com/ から適当なBoxを探して、Vagrantfileに下記のように書くだけです。
config.vm.box = "chef/centos-6.5"
これで vagrant upすれば、vagrantcloud.com からBoxファイルを自動でダウンロードしてくれます。(同時にローカルにキャッシュされて、2回目以降はキャッシュが使われるので高速です。)
vagrant upしてchef-soloで"hello world"するまで
以上のインストールができたところで、早速 hello worldする レシピを作って vagrant upまでやってみましょう!作業用ディレクトリを作る
$ cd /tmp
$ mkdir vgtest
$ cd vgtest
$ vi Vagrantfile
Vagrantfileを作成。下記のように記述。
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "chef/centos-6.5"
config.omnibus.chef_version = :latest
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "./cookbooks"
chef.add_recipe "hello"
end
end
$ mkdir -p cookbooks/hello/recipes/
$ echo "log 'hello world'" > cookbooks/hello/recipes/default.rb
これで準備はできました!
起動してプロビジョンする
$ vagrant up
下記のようなログが出れば成功です!(途中、"SSL validation of HTTPS"のような警告が出ますが無視して大丈夫です。)
==> default: [2014-09-23T16:58:09+00:00] INFO: *** Chef 11.16.2 ***
==> default: [2014-09-23T16:58:09+00:00] INFO: Chef-client pid: 2251
==> default: [2014-09-23T16:58:12+00:00] INFO: Setting the run_list to ["recipe[hello]"] from CLI options
==> default: [2014-09-23T16:58:12+00:00] INFO: Run List is [recipe[hello]]
==> default: [2014-09-23T16:58:12+00:00] INFO: Run List expands to [hello]
==> default: [2014-09-23T16:58:12+00:00] INFO: Starting Chef Run for localhost
==> default: [2014-09-23T16:58:12+00:00] INFO: Running start handlers
==> default: [2014-09-23T16:58:12+00:00] INFO: Start handlers complete.
==> default: [2014-09-23T16:58:12+00:00] INFO: hello world
==> default: [2014-09-23T16:58:12+00:00] INFO: Chef Run complete in 0.020542169 seconds
==> default: [2014-09-23T16:58:12+00:00] INFO: Running report handlers
==> default: [2014-09-23T16:58:12+00:00] INFO: Report handlers complete
なお、vagrant upがプロビジョニング(=ChefSolo実行)してくれるのは初回起動時のみです。
この後、レシピをいじってプロビジョニングを再実行したい場合は
$ vagrant provision
してください。うまく動きましたか?