はじめに
- vagrant で chef を使いたいという質問を頂いてすぐに答えられなかったので反省と復習の意味を込めて
- 幾つかやり方があるのでやり方別に書いてみる
- 但し、細かい設定手順等については改めて書くか、ググる
うんちく
ざっくりと登場人物について整理してみる。
Vagrant
- オフィシャルサイト
- Oracle VirtualBox のフロントエンドコマンドラインツール
- ただし VirtualBox だけではなく lxc や AWS の EC2 等も操作することが出来る(使ったことないけど)
- 仮想環境は
box
というファイル拡張子で管理されていて、ユーザーが作ったbox
ファイルがこちらで公開されている
chef
- オフィシャルサイト
- 無く子も黙る Provisioning Framework の決定版
- DSL はほぼ Ruby で記述することが出来る
- 各種設定やコマンドが記述された
recipe
をcookbook
という単位で管理し実行することで環境を構築する - 何度実行しても同じ環境が構築されること(べき等性)がキモ
詳しいことはググった方が良い。
以下、アレやコレや。
パターン #1 仮想環境に対して knife-solo
chef-solo
のフロントエンドツールである knife-solo
を使うパターン。これは別に Vagrant での仮想環境とかではなくても物理サーバーに対しても利用することが出来る。
手順
ざっくりとした手順。
- Vagrant で仮想環境を起動
- ホストと仮想環境間において
ssh
でアクセス出来ることを確認、鍵の交換も行なっておく knife solo prepare
で仮想環境で chef が利用出来るようにするknife solo cook
で仮想環境に対してcookbook
を適用する
メモ
- VirtualBox のネットワーク設定は
ブリッジモード
にしておく必要がある(と思う) - 同時に複数の仮想環境に対して
cookbook
を適用する場合にはやり方を考える必要がある - 個人的にはよく使う
パターン #2 vagrant up と vagrant provision
Vagrant で仮想環境を起動(vagrant up
)する際や vagrant provision
を実行して VirtualBox の共有フォルダ内にある cookbook
を適用するパターン。
手順
以下、ざっくり手順。
vagrant init
で生成されるVagrantfile
を修正する(Vagrantfile
内の該当部分は以下を参照)- 共有フォルダ内に
cookbook
設置する - 仮想環境を起動(
vagrant up
) する際かvagrant provision
するとcookbook
が適用される
Vagrantfile
以下、Vagrantfile
での chef を利用する部分の抜粋。
config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "./cookbooks" #chef.roles_path = "../my-recipes/roles" #chef.data_bags_path = "../my-recipes/data_bags" chef.add_recipe "hoge" #chef.add_role "web" # You may also specify custom JSON attributes: #chef.json = { :mysql_password => "foo" } end
上記の記述で最低限動くはず。
vagrant provision してみたの図
下記のような仮想環境に vim
パッケージをインストールする recipe
を書いて実行してみた。
# # Cookbook Name:: hoge # Recipe:: default # # Copyright 2013, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # package "vim" do action :install end
vagrant provision
を実行!
user@tpX1-Carbon:~/vagrant/chef-test$ vagrant provision [default] Running provisioner: chef_solo... Generating chef JSON and uploading... Running chef-solo... stdin: is not a tty [2013-10-16T21:42:51+00:00] INFO: Forking chef instance to converge... [2013-10-16T21:42:51+00:00] INFO: *** Chef 11.6.2 *** [2013-10-16T21:42:52+00:00] INFO: Setting the run_list to ["recipe[hoge]"] from JSON [2013-10-16T21:42:52+00:00] INFO: Run List is [recipe[hoge]] [2013-10-16T21:42:52+00:00] INFO: Run List expands to [hoge] [2013-10-16T21:42:52+00:00] INFO: Starting Chef Run for debian-7.1.0 [2013-10-16T21:42:52+00:00] INFO: Running start handlers [2013-10-16T21:42:52+00:00] INFO: Start handlers complete. [2013-10-16T21:43:37+00:00] INFO: Chef Run complete in 44.242426981 seconds [2013-10-16T21:43:37+00:00] INFO: Running report handlers [2013-10-16T21:43:37+00:00] INFO: Report handlers complete user@tpX1-Carbon:~/vagrant/chef-test$
注意点
- ホスト側で
Vagrantfile
が存在するディレクトリが共有フォルダとなる - 仮想環境では
/vagrant
ディレクトリが共有フォルダとなる - 場合によっては仮想環境に chef 環境を手動で整える必要がある(すでに chef 環境が整った
box
も提供されている) - 毎回
vagrant up
は大変なのでvagrant provision
がオススメ
最後に
アレコレという程のやり方は無かったかもしれないけど久しぶりに Vagrant を触って面白かった。