ラベル chef の投稿を表示しています。 すべての投稿を表示
ラベル chef の投稿を表示しています。 すべての投稿を表示

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自体は、これから触ってみたいと思います。

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

2013年7月25日木曜日

vagrant + chef solo + Berkshelf環境で、opscode-cookbookと自作cookを混在させたらハマった。その対応

前回のblogで、berks cookbookコマンドを用いたrepository作成の手順を紹介しました。
ただし、berks cookbookコマンドで作成したrepositoryはcookbookそのものでもあり、defaultの設定・環境だと、サードパーティのcookbook利用する場合、ファイル構成が分かりにくいものとなってしまいます。

そこで、前回ハマった「knife solo init」コマンドで作成したrepositoryにVagrantfileを用意し、サードパーティー(opscode-cookbooks)と自作cookbookを混在させる方法について再度見直しを行い、正常動作できるようにしたいと思います。

対応方法

先に結論を書くと、Berksfileに自作cookbookをpathで明示的に指定してあげました。こうすることで、opscodeのcookbookはネットからDL(git clone?)されるのに対して、自作cookbookはlocalの指定されたpathのdirを参照し、適切に動作するようになりました。

pochi-2:chef-repo snumano$ cat Berksfile
site :opscode

cookbook 'apt', '= 1.9.0'
cookbook 'mysql'
cookbook 'nginx'
cookbook 'database'
cookbook 'myapp', path: './site-cookbooks/myapp'    #追加行


コードはこちら

https://github.com/snumano/vagrant-knifesolo2


参考

http://berkshelf.com/
入門Chef Solo



まとめ

今回でやっと、Vagrant + Chef Solo + Berkshelfの対応手順が整理できました。
「こっちのやり方の方がいいよ」など情報ありましたら、お知らせいただけたら幸いです。
このエントリーをはてなブックマークに追加

2013年7月23日火曜日

vagrant + chef solo環境で、opscode-cookbookと自作cookを混在させたらハマった

表題の通りハマったので忘備録として残しておきます。

事象

  • knife solo initコマンドでrepositoryを作成後、opscode-cookbookからnginx,mysql,databaseなどのcookbookをberkshelfコマンドでinstall。
  • また、自作cookbookをknife cookbook createコマンドで作成。
  • 自作cookbookのrecipeを書いた後、vagrant upすると、自作cookbookが見つからない旨のerrorが発生。
  • error内容を確認すると、vagrant up時に、brrkshelfコマンドが実行され、Berksfileに記載されたcookbooksが~/.berkshelf/default/vagrant/berkshelf-***-default以下に作成され、chef soloコマンドにて仮想環境に転送されるよう。しかし、このberkshelf-***-default以下に、自作cookbookは作成されず、結果errorとなっている模様。
  • ちなみに、下記のopscode-cookbookのchef-repoをcloneした場合も、knife solo initの場合と同様に、errorになることを確認した。
  • git clone https://github.com/opscode/chef-repo.git
    

コード

原因

  • 不明

対応

  • Berkfsfileを_Berksfileにrename後、vagrant up実行すると正常に処理完了した。
    berkshelfコマンドの実行を抑制する事で、上述の事象は発生しなくなった。
    しかし、利用はよくわからない。
  • このままだと気持ち悪いので、Berkshelfコマンドを用いたrepository作成を試したところ、vagrant upの正常実行を確認できた。
    https://github.com/snumano/vagrant-berkshelf

まとめ

  • Berkshelfコマンドでrepository作成した場合、knife solo initした場合と比較して、ファイル構成とVagrantfileの設定内容が異なる事は確認できたが、どの部分が今回の動作の違いになっているのかは、今のところ不明。
  • 本事象の原因と根本対策について、どなたか教えていただけたら幸いです。
    (2013/7/23追記:Berksfileに自作cookbookをpath optionとともに追記することで、本事象を回避できることを確認しました。後日blogにまとめます)
  • berks cookbokコマンドは、cookbook = repositoryとして扱うようです。上述のサンプルコードでは、repository名であるchef-repoがそのままcookbook名になっているので、少しかっこ悪い。。。

最後に、入門Chef Soloは何回も読み返して参考にさせていただきました。






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

2013年7月18日木曜日

vagrant + knife soloでnginxをinstallしてみる

備忘録としてまとめます。

local環境


  • MacOSX 10.8.4
  • ruby 1.9.3p327

作成する仮想環境


  • Ubuntu 12.04
  • Nginx

手順

  1. chef-soloをinstall
  2. $ gem install chef
    $ knife -v
    Chef: 11.4.4
    
  3. knife-soloをinstall。最新のver0.3.0をinstallするため、githubからcloneします。
    $ git clone git@github.com:matschaffer/knife-solo.git
    $ cd knife-solo
    $ bundle
    $ bundle exec rake install
  4. Virual Boxをinstall
    こちらからDownLoad
  5. vagrantをinstall
  6. $ gem install vagrant
    
  7. vagrant環境を作成
    vagrantbox.esから使いたいboxを選ぶ
    $ vagrant box add ubuntu12_04 http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-vagrant-amd64-disk1.box
    $ vagrant box list
    $ mkdir Ubuntu
    $ cd Ubuntu
    $ vagrant init ubuntu12_04
    $ vagrant up
    
    下記で仮想環境にアクセスできる
    $ vagrant ssh
    
    knife soloでsshアクセスできるように下記を実施。host名はdev1とする。
    $ vagrant ssh-config --host dev1 >> ~/.ssh/config
    
  8. 仮想環境にknife soloをinstall
    $ knife solo prepare dev1
    
  9. cookbookレポジトリを作成。
    とりあえず、上述のVagrantのdirに一緒に作成しておきます。
    $ knife solo init chef-repo
    $ cd chef-repo
    $ git init
    $ git add .
    $ git commit -m 'init'
    
  10. 仮想環境にinstallするレシピを書く
    $knife cookbook create nginx -o site-cookbooks
    $vi site-cookbooks/nginx/recipes/default.rb
    package 'nginx' do
      action :install
    end
    
    service "nginx" do
      supports :status => true, :restart => true, :reload => true
      action [ :enable, :start ]
    end
    
    $ vi nodes/dev1.json
    {
      "run_list":[
        "nginx"
      ]
    }
    
  11. 仮想環境にレシピを適用
    $ knife solo cook dev1
    
  12. 仮想環境側で確認
    nginxのバージョンが最新にならない。。。srcからinstallしようかな。。。
    $ nginx -v
    nginx version: nginx/1.1.19
    
  13. 動作確認したら、recipeをcommit
    $ git add ./site-cookbooks/nginx/
    $ git commit -m 'add nginx recipe'
    

参考:
入門Chef Solo
http://docs.komagata.org/5098
このエントリーをはてなブックマークに追加

2013年6月24日月曜日

vagrant box addコマンドを実行すると、"Failed to untar the box file..."エラーメッセージが表示されOSイメージをダウンロードできない

原因ははっきり分かっていないが、正常にダウンロードできたので、備忘録。

環境は下記。
host:MacOS10.8
ruby:1.9.3p429
vagrant:1.0.7

事象は下記の通り。

  • ホームディレクトリ意外の適当なディレクトリで、vagrant box addコマンドを実行したところ、ダウンロード後のuntarに失敗した旨のメッセージが表示される。
pochi:Vagrant snumano$ vagrant box add base http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box
[vagrant] Downloading with Vagrant::Downloaders::HTTP...
[vagrant] Downloading box: http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box
[vagrant] Extracting box...
[vagrant] Cleaning up downloaded box...
Failed to untar the box file. This is usually because you're
attempting to add a box that isn't a valid box file. Please
double check that the box file is properly packaged.

  •  ~/.vagrant.d以下のtmp, boxesディレクトリには何もファイルなし。
  • こちらには、環境変数HOMEを上書きするのがいやなら、VAGRANT_HOMEを使うようにとのコメントあり。
  • vagrantのソースを見るが、環境変数HOMEをどのように設定しているか分からない。(単なるスキル不足。。。)

とりあえず、ホームディレクトリで再度、vagrant box addを実行してみると、、、
  • ~/.vagrant.d/tmp/に、OSイメージがdownloadされる事を確認できるようになった。で、download成功。
pochi:~ snumano$ vagrant box add base http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.3-x86_64-v20130101.box
[vagrant] Downloading with Vagrant::Downloaders::HTTP...
[vagrant] Downloading box: http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.3-x86_64-v20130101.box
[vagrant] Extracting box...
[vagrant] Verifying box...
[vagrant] Cleaning up downloaded box...

  •  ~/.vagrant.d/boxes/に各種ファイルが作成された。

pochi:.vagrant.d snumano$ pwd
/Users/snumano/.vagrant.d
pochi:.vagrant.d snumano$ tree
.
├── boxes
│   └── base
│       ├── Vagrantfile
│       ├── box-disk1.vmdk
│       └── box.ovf
├── gems
├── insecure_private_key
└── tmp
4 directories, 4 files

根本原因は不明のままだが、とりあえず先に進む事とする。

(2013.6.24 追記)
gem installでvagrantをinstallした場合、上述の通りver1.0.7だが、こちらのサイトでは最新は1.2.2であった。MacOS用のバイナリをinstallして様子見している。
このエントリーをはてなブックマークに追加