テスト自動化Serverspec導入のススメ

server-spec

龍野情報システム東京チームです💻!
突然ですが、サーバ構築時の構成確認をする際の確認方法はどのようにされてますか?
龍野システムでは[Serverspec]というrubyを使用したオープンソースを使って、サーバ毎に構成のテストをしてみました。
コマンドでの出力の比較であったり、応用すれば、どのルールで確認を行うか設定も可能なため汎用性も高く導入を進めております。

お客様環境の規模によりconfigの値を変えていたり、起動しているミドルウェアやバージョンが異なっているなど、台数が増えてくると手作業での確認には、多くの時間を使ってしまいます。

Serverspecでは、configの比較やミドルウェアのインストールや起動状況を簡単に確認できます。
テスト対象がある程度パターン化されている場合、テストの設定ファイルを使い回すことで、複数台の確認の時間短縮することが可能です。
今回はserverspecをまだ知らない方向けに、どのようなツールなのかご紹介いたします。

目次はこちら

  1. サポートされているOS
  2. 確認できる項目
  3. 導入方法
  4. まとめ

 

サポートされているOS

サーバと一言で言っても、現在様々なOSが利用されているかと思います。
実際に利用可能なOSは、下記となっております。

* AIX
* Arch Linux
* Darwin(Mac OS X)
* Debian
* Fedora/Red Hat/CentOS
* FreeBSD
* Gentoo Linux
* NixOS
* OpenBSD
* openSUSE
* Plamo Linux
* SmartOS
* Solaris
* SUSE
* Ubuntu
* Windows

一般的によく使用される、RedHatやUbuntuなどのLinuxOSやWindowsもサポートされているので、
さまざまなOSで利用できます。
 

確認できる項目

serverspecの公式からテストできる項目の一覧が見られます。
様々な確認をすることが可能ですが、今回テストで確認した項目をいくつか記載いたします。

file

-be_file ファイルの有無をチェックする
-be_owned_by ファイルの所有者権限の確認
-be_grouped_into ファイルのグループの確認
-be_mode ファイルのモード確認
-content ファイル内に指定の記述があるか確認

service

-be_enabled,be_running サービスが起動しているか、自動起動になっているか
-be_listening したいしたポートがListening状態となっているか

package

-be_installed パッケージがインストールされているか確認
-be_installed.with_version パッケージのバージョン確認

cron

-have_entry 対象のcronが登録されているか

また、コマンドの返り値と指定した値とのマッチを確認する事ができるため、
コマンドでの確認方法から色々な応用が可能です。

#timestampの確認

describe command("date") do
its(:stdout) { should match /JST/ }
end

#swapファイルの確認

describe command("free") do
its(:stdout) { should match /Swap:/ }
end

 

導入方法

serverspecの初回の導入方法についてご紹介いたします。
※rubyがインストールされている環境で導入してください。

-rubyライブラリのインストール


$ bundle
$ gem install serverspec

Serverspec初期セットアップ

※Unix系かつSSH出来る環境を想定しています。

$ 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/sample_spec.rb
+ spec/spec_helper.rb
+ Rakefile
+ .rspec

下記ディレクトリにサンプルのテストファイルが生成されているのですが、
サンプルのテスト内容は、
Apacheがインストール、起動、自動起動、80番ポートがリッスンされているか
といった内容になっております。

設定ファイルは、下記ファイルです。
spec/www.example.jp/sample_spec.rb

実際にサーバにテストを実行する方法


% rake spec

初期のサンプルファイルでは、Apacheを使ったwebサーバ用のテストとなっており、
Apacheを利用していないサーバのテストにはなりません。
公式を参照にサーバにインストールされているパッケージに
sample_spec.rbを書き換える等の対応をしてテストしてみてください。
 

まとめ

今回の紹介ではsampleを使った簡単なテストを行ってみましたが、
サーバ単位で設定を分けたり、紹介できなかった様々なテストもあります。
試しに触ってみてご興味がある方は、ご自身の環境で利用できるか色々試してみてください。
いろんな方が使っているので、応用方法は検索すればでてきます。
また、機会があれば応用編も投稿させていただこうと思います。

jaJapanese