2013年11月16日土曜日

VagrantとChefSoloでTremaEdge環境をつくる

最近、OpenFlow徹底入門を読んでいます。再びOpenFlowでいろいろやってみたいと感じています。
この本ではOpenFlowコントローラとしてFloodlightを使用しています。今までOpenFlowコントローラは、主にTremaを勉強してきましたが、いろいろなコントローラを触りながら、OpenFlowの本質を知るのもいいなかなと思っています。
ただ、そのための環境を作成するのは、(webに情報があるとは言え)やはり時間がかかります。また、local PCのリソース(主にdisk容量)を消費するので、どこかのタイミングで、ある環境を削除する判断をしなければなりません。(今までそのような経験をしてきたので、PC購入の際にはdisk容量を多めにするようにしています)
VagrantとChefSoloを使えば、サーバ環境をファイルで管理できる、個々の環境imageを保持する必要がなくなります。よって、diskの使用率を低減することができます。
今後、検証環境を作成する際には、VagrantとChefSoloで作成し、githubで保存していきたいと思います。

今回やること

今回は、trema-edgeの環境を作成してみたいと思います。 trema-edgeはtremaのOpenFlow1.3版で、OpenFlow1.0はサポートしていません。今のところ、tremaとtrema-edgeは別のものです。
また、tremaはRuby1.8環境で動作するのですが、Ruby1.8の開発は終了しています。それに対して、trema-edgeはRuby2.0環境で動作します。詳しくは下記。

設定ファイル

まず今回作成した設定ファイルをgithubに保存しましたので、ご参照ください。
github vagrant-trema-edge

設定のポイント

install手順はgithubのREDAMEに従っています。
手順は難しくありませんが、今回は、rubyのバージョン管理にrvmを使いましたので、rvmの設定のポイントを記載します。

Berksfileの設定

cookbookとしてrvmを登録します。rvm用のcookbookはいくつか存在しますが、今回使用したものが安定しているようでした。
$ vi Berksfile
site :opscode
cookbook 'apt'
cookbook 'rvm', github: 'fnichol/chef-rvm'
cookbook 'myapp', path: './site-cookbooks/myapp'

Vagrantfileの設定

chef.add_recipeとして下記の2行を追加し、chef.jsonでrubyのバージョン指定と、gemsの指定を行います。
$ vi Vagrantfile
-snip-
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
chef.add_recipe "apt"
chef.add_recipe "rvm::system"
chef.add_recipe "rvm::vagrant"
chef.add_recipe "myapp"

chef.json = {
  "rvm" => {
    "default_ruby" => "ruby-2.0.0",
    "global_gems" => [
      {"name" => "bundler"},
      {"name" => "rake"}
    ]
  }
}
-snip-

Recipeの設定

今回、cookbookでrvmをinstallしているので、rvm_shellリソースが使えるようになっています。rvm_shellでrvmに依存する部分の記載を行います。
また、githubからtrema-edgeのrepositoryを取得するのはgitリソースを使用します。
$ vi site-cookbooks/myapp/recipes/default.rb
git "/home/vagrant/trema-edge" do
  repository "git://github.com/trema/trema-edge.git"
  reference "master"
  action :checkout
  user "vagrant"
  group "vagrant"
end

rvm_shell "install trema-edge" do
  ruby_string 'ruby-2.0.0'
  cwd "/home/vagrant/trema-edge"
  code <<-EOC
    bundle install
    rake
  EOC
end

bash ".bashrc" do
  not_if "which trema"
  code <<-EOC
    echo 'PATH="$HOME/trema-edge/bin:$PATH"' >> /home/vagrant/.bashrc
  EOC
end

まとめ

  • 今回、trema-edgeの環境設定をVagrantとChefSoloで行いました。
  • 設定のポイントとしては、今回はrvmを使用し、ruby2.0.0を指定しています。
  • trema-edge自体は、これから触ってみたいと思います。

このエントリーをはてなブックマークに追加