Ruby
RSpec
Gem
bundler
serverspec
More than 1 year has passed since last update.

serverspec について

serverspecを使用すると、サーバーが正しく設定されてチェックするためのRSpecのテストを書くことができます。

serverspecはSSHを介してサーバーの実際の状態をテストするので、サーバーにエージェントソフトウェアをインストールする必要はなく、Puppet、Chef、CFEngine等の、いかなる構成管理ツールも使うことができます。

--

インストール

アプリケーションのGemfileに次の行を追加:

gem 'serverspec'

そして実行:

$ bundle

または以下のように自分自身でインストール:

$ gem install serverspec

--

はじめに

serverspec-initコマンドを実行すると、以下の質問を訊かれるので、入力する。

  • OS
  • 接続方法
  • Vagrantのインスタンスか?
  • 接続先のホスト名

この例では以下のように入力するが、環境に応じて適宜読み替える。

$ 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

このようにして作られたspecファイル(仕様書)は、そのサンプルの内容は次のようになる。(環境に応じて適宜読み替えること)

spec/www.example.jp/httpd_spec.rb
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 }
  it { should contain "ServerName www.example.jp" }
end

このように、サーバーをテストするためのspecファイルを書くことができます。

SSHのバックエンドでserverspecは ~/.ssh/config に設定されたユーザー もしくは 現在のユーザー として複数の目的のサーバーにログインします。 ログインユーザーを変更したければ、 spec/spec_helper.rb を次のように編集してください。

spec/spec_helper.rb
user    = options[:user] || Etc.getlogin

テストを実行します。

$ rake spec
/usr/bin/ruby -S rspec spec/www.example.jp/httpd_spec.rb
......

Finished in 0.99715 seconds
6 examples, 0 failures

このコマンドを実行するだけで、specディレクトリに置かれたすべてのホストのspecファイルのテストを実行します。