Chefのテストツール kitchen-ec2を使う – serverspecでテストを実施する

2014.07.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。望月です。
以前書いたエントリ、Chefのテストツール kitchen-ec2を使う – 導入、チュートリアル | Developers.IOの続きとして、kitchen-ec2を利用したテストを実行してみます。kitchen-ec2では様々なテストフレームワークを利用可能なようですので、今回はserverspecを利用したいと思います。

設定

前回のブログの続きという想定で実施します。前回はapache2.4のレシピをkitchenを利用してEC2で起動し、Chef クックブックを適用するところまで行いました。

まずは、serverspecのspecファイルを作成しましょう。serverspecではサーバの現在の状態をRSpecの記法を利用して記述します。

kitchenでserverspecを利用するためには所定のディレクトリに*_spec.rbを配置します。ディレクトリ名はtest/integration/<テストスイート名>/<テストフレームワーク名>となるようです。ですので、defaultスイートでserverspecを利用する場合のディレクトリ名はtest/integration/default/serverspecとなります。

mkdir -p test/integration/default/serverspec

次にspecを作成します。今回はtest/integration/default/serverspec/httpd24.rbを作成しました。

require 'serverspec'

include Serverspec::Helper::Exec
include Serverspec::Helper::DetectOS

RSpec.configure do |c|
  c.before :all do
    c.path = '/sbin:/usr/sbin'
  end
end

describe package('httpd24') 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.with('tcp') }
end

serverspecに触れたことが無い方でも、何をしようとしているかが伝わってくるのではないでしょうか。この簡潔で直感的な既述がserverspecの魅力だと思っています。

さて、それではテストの実行です。前回のエントリで既にkitchen convergeを実行していますので、Chefレシピの適用は終わっています。serverspecを適用するkitchen verifyコマンドを実行しましょう。

$ kitchen verify default-AmazonLinux-201403
-----> Starting Kitchen (v1.2.1)
-----> Verifying <default-AmazonLinux-201403>...
       Removing /tmp/busser/suites/serverspec
       Uploading /tmp/busser/suites/serverspec/httpd24_spec.rb (mode=0644)
-----> Running serverspec test suite
/opt/chef/embedded/bin/ruby -I/tmp/busser/suites/serverspec -S /opt/chef/embedded/bin/rspec /tmp/busser/suites/serverspec/httpd24_spec.rb --color --format documentation

Package "httpd24"
  should be installed

Service "httpd"
  should be enabled
  should be running

Port "80"
  should be listening

       Finished in 0.49847 seconds
       4 examples, 0 failures
       Finished verifying <default-AmazonLinux-201403> (0m6.13s).
-----> Kitchen is finished. (0m7.24s)

テストが実行されました。かなり簡単にテストが実行できるので、これはぜひ皆さんに試してほしいと思います。

まとめ

非常に短いエントリになりましたw。というのも、公式ドキュメント通りに設定すればほぼ迷わず設定と動作確認までが実施できたからですね。これでテストの実行は行えたので、あとはひたすらテスト項目を拡充していくことが重要だと思います。
そして、もう一つやり残していることがあるので、それはまた次のブログでご紹介しようと思います。