サーバーの設定をしていて、やはり設定が漏れてしまうことが多々ある。 そういえばサーバーのテストができるツールがあったよなーと思い出したのが、ServerSpecだった。 とりあえず細かいことは抜きにして、試してみた。
ServerSpecとは?
With serverspec, you can write RSpec tests for checking your servers are configured correctly. Serverspec tests your servers' actual state through SSH access, so you don't need to install any agent softwares on your servers and can use any configuration management tools, Puppet, Chef, CFEngine and so on.
サーバーが正しく設定されているかチェックするためのRSpecのテストを書くことができます。 ServerspecはSSHアクセスを介して、サーバの実際の状態をテストしますので、あなたのサーバーにエージェントソフトウェアをインストールする必要はありませんし、どのような構成管理ツール、というようにPuppet、Chef、cfengineのとを使用することができます。
サーバー側にエージェントをインストールする必要がない! これは大きいと思う。
インストールと実行
参考にしたサイト serverspecの使い方 ありがとうございます!
$ gem install serverspec
$ serverspec-init Select OS type: 1) UN*X 2) Windows Select number: 1 Select a backend type: 1) SSH 2) Exec (local) Select number: 1 Vagrant instance y/n: n Input target host name: www.example.jp + spec/ + spec/www.example.jp/ + spec/www.example.jp/httpd_spec.rb + spec/spec_helper.rb + Rakefile
initするとどんなサーバーなのか質問されるので、回答する。
コマンド実行したディレクトリにspecディレクトリが生成されている。 spec以下にさきほど入力したホスト名でディレクトリがあり、そこにサンプルのテストコードが生成される。
require 'spec_helper' describe package('httpd') do it { should be_installed } end describe service('httpd') do it { should be_enabled } it { should be_running } end describe port(80) do it { should be_listening } end describe file('/etc/httpd/conf/httpd.conf') do it { should be_file } its(:content) { should match /ServerName www.example.jp/ } end
apacheが入っているかチェックするテストコードみたい。
サンプルを試してみる。
$ rake spec ・ ・ ・ 略) Finished in 0.79426 seconds 6 examples, 1 failure
※最初はrakeが無い!って怒られたようなので、gem install rakeを行った。 6個のうち1個テストが通らなかったらしい。。。 httpd.confのServerNameがホスト名と合ってないっぽい。あとで見てみよう。
ハマったところとしては、sshするときのユーザーがよくなかったというのがあった。 実はサーバー(さくらのVPS)を設定したときに、rootでssh接続できないようにしていた。 なので、一般ユーザでテストを行っていたのだけど、rootじゃないと叩けないコマンド(たぶんserviceとか)が叩けなくてテストが通らずにいた。 rootでsshできるようにサーバーを設定し直したところ、テストが通るようになった。
まだまだ覚えることは多いなー^^;
まとめ
ServerSpecはサーバーにインストールいらずで、手軽に使える良いツール。 RSpecをチームで共有するとテストの効率があがるかも?