あらすじ
猫も杓子もサーバーテストな今日この頃なのでそろそろそういうのをやっておきましょう。
大体 vagrant から始める感じみたいですが、学習効率を考えて最初に serverspec と戯れておくことにします。
私の Mac について
% sw_vers ProductName: Mac OS X ProductVersion: 10.8.4 BuildVersion: 12E55 % httpd -v Server version: Apache/2.2.23 (Unix) Server built: Jun 10 2013 12:01:00
install rbenv
% git clone git://github.com/sstephenson/rbenv.git ~/.rbenv % echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc % echo 'eval "$(rbenv init -)"' >> ~/.zshrc % exec $SHELL -l
install ruby-build
% git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
動作確認
% rbenv install -l
install ruby
% rbenv install 1.9.3-p448 % rbenv global 1.9.3-p448 % rbenv rehash
insatll rbenv-rehash
% gem i rbenv-rehash
vim から呼び出しても正常かどうかを確認する
% ruby -v ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0] % vim +\!ruby\ -v +q :!ruby -v ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]
install serverspec
% gem install serverspec rake % mkdir ~/ServerSpec % cd ~/ServerSpec % serverspec-init Select a backend type: 1) SSH 2) Exec (local) Select number: 2 + spec/ + spec/localhost/ + spec/localhost/httpd_spec.rb + spec/spec_helper.rb + Rakefile
テスト実行。
% rake spec
盛大にこける。どうやら serverspec/commands/darwin.rb を見る限り serverspec/commands/base.rb で定義している be_installed といった関数を上書きする必要があるらしいがまだ実装されていないようだ。
という事で練習開始
とりあえず今回は練習なので ~/ServerSpec/lib/severspec/commands/darwin.rb を追加してみました。httpd -v というコマンドを実行して期待通りの結果になるかをテストします。
% cat ~/ServerSpec/lib/severspec/commands/darwin.rb require 'shellwords' module Serverspec module Commands class Darwin < Base def check_installed(package,version=nil) cmd = "#{escape(package)}" if ! version.nil? cmd = "#{cmd} -v | grep -w -- #{escape(version)}" end cmd end end end end
~/ServerSpec/spec/localhost/httpd_sepc.rb を以下のように編集。 他の箇所は使わないのでコメントアウトしたり削除したりしてください。
% cat ~/ServerSpec/spec/localhost/httpd_sepc.rb require 'spec_helper' describe package('httpd', '2.23') do it { should be_installed.with_version('2.23') } end
テスト実行
% rake spec okamuuu/.rbenv/versions/1.9.3-p448/bin/ruby -S rspec spec/localhost/httpd_spec.rb . Finished in 0.0622 seconds 1 example, 0 failures
おめでとうございます。
まとめ
vagrant だとか chef だとか次々と新しい言葉を聞かされてもよく理解できなかったりするので、そんな人はとりあえず serverspec からはじめてもいいんじゃないでしょうか?