Serverspecの概要からインストールまで
Serverspecの内部的な仕組み
次に、Serverspecの内部的な仕組みを簡単に紹介します。Serverspecは4つのテスト実施方法に対応しています。
- LinuxマシンへのSSH接続を経由したリモート実行
- Linuxマシンでのローカル実行
- WindowsマシンへのWinRM接続を経由したリモート実行
- Windowsマシンでのローカル実行
たとえば、LinuxマシンへのSSH接続を経由したリモート実行のパターンの場合、Serverspecのテストコードを実行する元となるサーバからテスト実行対象のサーバに対してSSH接続し、接続先に対して稼働状況確認用のコマンドを実行します。そしてその結果を、Serverspec実行元のサーバにて正常かどうかを評価するといった仕組みです。
このような仕組みとなっているため、テスト実行対象のサーバにはエージェントのような特別なソフトウェアをインストールする必要はありません。Linuxマシンの場合はSSH接続、Windowsマシンの場合はWinRM接続が可能であるだけで利用できます。
より具体的に、テスト実行対象サーバ内での挙動を見てみます。Pythonのパッケージがインストールされているかをテストするコードを実行した時の挙動です。
テスト実行対象サーバがCentOSの場合、テスト実行対象サーバ側のSSH接続のログ(/var/log/secure)には次のような結果が記録されます。
このログをみると、pythonパッケージの存在確認コマンド(/bin/rpm -q python)の実行前に、OSのアーキテクチャの確認やOSの種類・バージョンの確認を実施しているのがわかります。このようにServerspecは、実行対象サーバのOSの種別を判断して自動的にテスト用の実行コマンドを切り替えて処理を行います。OSの種別毎の違いを吸収するコードは、Serverspecと併用するSpecinfraにて実装されています。たとえば、図2でCentOSに対して実行したpythonパッケージのインストール状態を確認するコードをUbuntuに対して行うと、「dpkg-query -f '${Status}' -W python」が実行されます。
Serverspec利用までの流れ
それでは具体的にServerspecの利用方法を紹介します。Serverspecを利用するには以下の作業が必要となります。筆者はServerspec実行元サーバのOSとしてUbuntu 14.04を導入して作業を実施しました。
作業 | 実施対象 | |
---|---|---|
1 | Serverspecのインストール | Serverspec実行元サーバ |
2 | Serverspecの初期化処理 | Serverspec実行元サーバ |
3 | 接続設定 | Serverspec実行元サーバとテスト実行対象サーバ |
4 | sudo実行設定 | テスト実行対象サーバ(Linuxの場合) |
5 | テストコードの作成 | Serverspec実行元サーバ |
6 | テスト実行 | Serverspec実行元サーバ |
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Serverspecの効果的活用に向けたTips
- Serverspecテストコード実例の紹介とコード記述の際のポイント
- Ansibleにおいてテストを行う理由
- 開発チームの環境をAnsibleで一括構築しよう
- RailsのテストフレームワークRSpecの基礎知識
- テスト駆動インフラ/インフラCIの潮流、Serverspecが果たす役割
- Serverspec誕生からインフラCIの今後までを開発者に聞いてみた
- マシン・イメージを自動構築し、作業効率を高めるPacker入門
- WordPress コース 2nd Stage を攻略しよう(Linux 仮想マシン編)
- Windows Azure上にLinuxインスタンスを立ち上げる(クエスト5)