Serverspecテストコード実例の紹介とコード記述の際のポイント

2014年8月22日(金)
池田 大輔

第1回では、Serverspecの概要とテストコードを書くまでの事前準備についてご紹介しました。第2回では、より具体的な環境を例として、実際に即したServerspecのテストコードの書き方をご紹介します。テストコードを記述する際のポイント等をまとめ、テストコードの記述をスムーズに実施できるようになることを目的として解説します。

LAMP構成のシステムのテスト

具体的なシステムとして、LAMP(Linux、Apache HTTP server、MySQL、PHP)構成の環境を想定し、この環境に対するテストコードの一例を紹介します。

LAMPの構成を採るシステムの例として、今回は統合監視ソフトウェアのZabbixを稼働させるための環境を取り上げます。LAMP環境のベースとなるLinuxは、CentOS 6.5を想定しています。

図1: テスト対象環境の概要図

稼働状況のテストとして、大まかに以下の4つの部分に分けて各部分の稼働状況に対するテストコードを見ていきます。

  • OS(Linux)部分
  • Webサーバ(Apache HTTP server)部分
  • DB(MySQL)部分
  • アプリケーション(PHP)部分

今回の例で紹介するServerspecのテストコードでは、次の表に掲載したResourceTypeを利用します。

表1: LAMP構成のテストに利用するリソースタイプResourceType

ResourceType種別概要利用可能なMatcherの例
packageパッケージがインストールされているかのテストを実施。
rpmやdeb、rubyのgemパッケージに対応。バージョン確認も可能。
be_installed等
serviceサービスの稼働状況のテストを実施。
稼働状態や初期起動の設定状態の確認が可能。
be_running、be_enabled等
file指定したファイルの存在確認や権限、所有者の確認、ファイルの中身の確認が可能。be_file、be_directory、be_owned_by、be_writable等
command任意のコマンドの実行結果の確認が可能。return_stdout、return_stderr、return_exit_status等
selinuxSELinuxの状態の確認が可能。be_disabled、be_enforcing、be_permissive
iptablesiptablesの設定状態の確認が可能。have_rule
hostホストの名前解決が可能かどうかの確認やホストに到達可能かどうかの確認が可能。be_resolvable、be_reachable等
portTCP、UDPのポートの稼働状態の確認が可能。be_listening
php_configPHPの設定状態の確認が可能。-

【ポイント】
IPアドレス等、実行対象の環境毎に変わる値については変数として外に出し、テストコードの実行処理部分で変数展開するように書くことで、テストコードの使い回しが行いやすくなります。上記の例では、テストコード内で直接変数を定義してテストコード部分で展開していますが、設定情報だけを別ファイルとして管理することも可能です。その方法については第3回で紹介するTipsの中で解説します。

TIS株式会社

Twitter : @ike_dai
TIS株式会社OSS推進室所属。社内向けシステムの保守運用業務を経験後、クラウド時代の効率的な統合運用管理をテーマに活動中。特に、OSSを駆使した運用のエコシステム実現を目指し、Zabbix,fluentd,Serverspec,Ansibleなどの導入や検証に取り組む。技術検証成果などを技術ブログ『Tech-Sketch』にて発信中。著書:『Zabbix統合監視徹底活用 - 複雑化・大規模化するインフラの一元管理』

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています