Vagrant Berkshelf plugin
RiotGamesがリリースしてるBerkshelfというプロダクト。
GemfileっぽくBerksfileというファイルに使いたいcookbookを書いていく。
site :opscode
cookbook 'apt'
cookbook 'git'
cookbook 'ruby'
そして、cookbookをネット経由だかリソース経由だかでインストールする。
berks install --path cookbooks
Berkshelf自体、とても便利。
Vagrantと連携させたいなーと思ってたら
vagrant-berkshelf pluginがあった。RiotGames製。
これで、Berksfileにcookbook一覧を書いて
あれこれすれば終わるな~、便利だなーと思ったがはまりどころが。
site :opscode
cookbook 'rbenv', git: 'https://github.com/fnichol/chef-rbenv.git'
んで、こうしてberks installすれば、
rbenvのgithub上で公開されてるクックブックを手元に落としてこれる。便利。
site-cookbooks転送でハマり
でまあ、enabled = true
にしないとVagrant Berkshelf plugin無効になってると思うじゃないですか。
そうじゃなかったんですよね。明示的にenabled = false
にする必要があります。
まあ、Berkshelfの教義に沿うならそりゃcookbooksだけしか使わないですよね...
config.berkshelf.enabled = false
はまって週末を無駄にしました...
chef.cookbooks_path = [ "cookbooks", "site-cookbooks" ]
以上のように明示的にcookbooksのパス指定しても、
Vagrant box上にホストマシンからcookbookが転送されないので
「???」ってなっちゃって大変でした。
メタなcookbooksを使うには
Vagrant Berkshelf pluginを使いつつ、メタな、
他のcookbook利用前提のcookbooksを使うにはどうするか。
cookbookそのものを調整中の場合
Berksfileのcookbookにpathとしてローカルを指定する
cookbook 'my_cookbook', path: "/home/hoge/fuga/site-cookbooks/my_cookbook'
ローカル指定(path)しても、Berkshelfは
opscodeにあるcookbook優先して確認しにいくので
cookbookについてはユニークな名称じゃないといけない。
メタなcookbookが完成した場合
Berksfileのcookbookにメタcookbookのリポジトリを登録する
cookbook 'my_cookbook', git: 'https://github.com/futoase/chef-my_cookbook.git'
その他
chefが既にインストールされてるVagrant box使う場合、
古いバージョンのchefを利用することになるので、vagrant-omunibus pluginを利用すると良いです。
config.omnibus.chef_version = "11.4.4" # バージョン 11.4.4 の chef を使いたい場合
knife-solo使うとか他にもやり方はあるけど、なんかこう手段が多すぎる...
他
個人的にresetさんとお話してみたい