vagrant + berkshelf + chefで環境をつくってみたら鼻血が出た
vagrantのチュートリアルをやったログでvagrantの便利さとおよその使い方は理解できた。
もともとChefのレシピを作る環境を用意しよう、というのが主題だったので今回はVagrantを活かしてChefのレシピを書いてみようとしたところ、最近じゃBerkshelfというツールがあってこれも活かすとイカスことになるってもっぱらの噂だったので試してみたメモ。
入門Chef Solo - Infrastructure as Code
- 作者: 伊藤直也
- 出版社/メーカー: 伊藤直也
- 発売日: 2013/03/11
- メディア: Kindle版
- 購入: 16人 クリック: 1,027回
- この商品を含むブログ (19件) を見る
Berkshelfはcookbookを管理してくれるツール。bundler->gemのようにberkshelf->cookbookというイメージ。
具体的にどういうメリットがあるかというと、別プロジェクトのレシピを交えたrun_listが組める、ということ。つまり、chefリポジトリとプロジェクトの結合が解消でき、たとえば、これまでプロジェクトごとにchef-repoを構えていたケースなどでありがちだった、複数プロジェクトに渡って共通利用するcookbookの重複管理が解消できたり、そもそも自分でレシピを書かずにhttps://github.com/aws/opsworks-cookbooksのように公開されているものを組み合わせて利用できるなどのメリットがある。
今回の試みとして、rbenvをインストールしてRuby2.0をインストールしてglobalに設定する、というのをやってみる。
berkshelfのインストール
インストールはgemで一発。
$ gem install berkshelf
cookbook作成
メインのcookbookを作る。
$ berks cookbook test
するとここにCookbookセット+Vagrantfile + Berksfileが生成される。このCookbookがプロジェクト固有のレシピとなり、これ以外のCookbookは別で管理されているものを使うのが流儀。・・・なんだと思う。
外部のcookbookをインストールする
とりあえず、rbenvのCookbookを調達する。外部のCookbookの調達はBerksfileにちょろっと書くだけでイケる。
Berksfile
site :opscode metadata cookbook 'rbenv', ">= 1.4.1" , git: 'git://github.com/RiotGames/rbenv-cookbook.git'
こんな感じに定義する。
インストール
$ berks install
これでデフォルトだと~/.berkshelf/cookbooks/に指定したcookbookとその依存関係のあるcookbookがダウンロードされ、test cookbook内のレシピからincludeすることができる。
メインのレシピを書く
なんの変哲もないレシピ。こんな感じ。
test/recipes/default.rb
include_recipe 'rbenv::default' include_recipe 'rbenv::ruby_build' rbenv_ruby "2.0.0-p195" do ruby_version "2.0.0-p195" global true end
Vagrantの設定
さっき書いたレシピをVM起動時に呼び出すよう設定する。
Vagrantfile
~snip~ config.berkshelf.enabled = true ~snip~ config.vm.provision :chef_solo do |chef| chef.run_list = [ "recipe[test]" ] end
config.berkshelf.enabled = true
はberks cookbook testしたときに作られたVagrantfileに勝手に記載されている。
あと、自動で作られたVagrantfileはネットワーク設定がprivate_networkになってたりするので、その辺を適宜都合のよいように修正しておく。
berkshelfプラグインのインストール
このままvagrant upするとberkshelfなんて設定項目ねーよ、と言われるのでvagrantと連携できるようvagrantのberkshelfプラグインをインストールする。
$ vagrant plugin install vagrant-berkshelf
vagrant up
あとはvagrant upするだけ。もし、すでにupしてある場合で、再度レシピを実行したい場合は
$ vagrant provision
というコマンドがある。
rubyのインストールは時間がかかるけどあとは待つだけのはず・・・
確認
$ vagrant ssh [vagrant@test-berkshelf ~]$ ruby -v ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-linux]
うわー、できてる、なにこれキモい。
鼻血たれるわー。
- 作者: Mitchell Hashimoto
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2013/06/12
- メディア: ペーパーバック
- クリック: 5回
- この商品を含むブログ (2件) を見る