Posted at

serverspecの使い方

More than 5 years have 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ファイルのテストを実行します。