kidoOooOoooOOom

IT系で開発やってます

serverspec実行できるところまで試してみる

serverspecとは、サーバの状態をテストするためのフレームワークで、Rubyで実装されておりRSpecの書き方に準拠している。
公式サイトはこちら http://serverspec.org/

今回、インストールをして簡単なテストが実行できるところまでを試してみたのでメモ。

  • インストール
$ gem install serverspec

するだけでOK.

  • 初期化

serverspecを実行するサーバ上で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  ←SSH接続をしてリモートのサーバに対してテスト実行する場合は1を
 
Vagrant instance y/n: n
Input target host name: dev1-web1
+ spec/
+ spec/server-01/
+ spec/server-01/httpd_spec.rb
+ spec/spec_helper.rb
+ Rakefile


~/.ssh/config に 上記で設定したhost name と、実際のテスト対象のserver host情報、ログインユーザ情報を書いておく。

Host dev1-web01
HostName dev-web01.hoge.hoge.hoge
User watashi

serverspecのテストでは sudo 実行環境が必要なので、テスト対象のサーバで visudoを実行し、test実行ユーザのSUDO権限を設定しておく

$ sudo visudo
watashi ALL=(ALL) ALL

この設定の場合、sudo実行時にパスワード入力が必要になる。
serverspecの実行時に、SUDO_PASSWORDもしくは、ASK_SUDO_PASSWORD環境変数を設定することでテスト実行が可能となる。
パスワードを環境変数に設定したくない場合には、環境変数「ASK_SUDO_PASSWORD」を1に設定することでテスト実行時に対話式でsudoパスワードを入力することが可能。

$ export ASK_SUDO_PASSWORD=1
  • サンプルテストコード

serverspecがちゃんと動くかどうか確認するための簡単なテストを実行してみよう。
初期化で作成された sample_spec.rbを下記のように書き換える。

require 'spec_helper'
 
set :request_pty, true
  
describe package('nodejs'), :if => os[:family] == 'ubuntu' do
  it { should be_installed }
end
 
describe service('hogehoge'), :if => os[:family] == 'ubuntu' do
  it { should be_running }
end
 
describe port(2000) do
  it { should be_listening }
end

これで rake specを実行すると、
「highline is not available. Try installing it.」
と、'highline'が無いと怒られたので、gem install highline でインストール。
その後、rake specでテストが無事実行されることを確認。

$ rake spec
Package "nodejs"
  should be installed
 
Service "hogehoge"
  should be running
 
Port "2000"
  should be listening
 
Finished in 0.27195 seconds (files took 3.97 seconds to load)
3 examples, 0 failures

Serverspec

Serverspec