- 更新日: 2014年7月30日
- RSpec
Serverspecの使い方入門、Chefで構成管理するサーバー環境をテスト
Chef で Cookbook/Recipe の作成に一通り慣れてきましたので、Serverspec でサーバー状態のテストを行います。Serverspec は、サーバーテストを行えるように RSpec を拡張したテスト・フレームワークです。
今回は入門編ですが、ざっと Readme や関連エントリーに目を通した感じですと、RSpec を知っていれば馴染みのある感じでとっつきやすそうです。Vagrant 上の CentOS 仮想マシンで、Serverspec によるテストを行います。
Serverspec – Home
GitHub: serverspec
Gemfile に serverspec を追加してインストール
Chef のリポジトリを作成したディレクトリの Gemfile に、serverspec の gem を追加します。
Gemfile
1 2 3 4 5 6 7 8 |
source "https://rubygems.org" gem "chef" gem "berkshelf" gem "knife-solo" gem "serverspec" |
続いて、bundle install。
1 2 3 |
$ bundle install --path vendor/bundle |
serverspec-init コマンドで spec ファイル生成
serverspec-init コマンドを実行して、以下のように対話型で作業を進めます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
$ bundle exec 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: y Auto-configure Vagrant from Vagrantfile? y/n: n Input vagrant instance name: centos.vagrant + spec/ + spec/centos.vagrant/ + spec/centos.vagrant/httpd_spec.rb + spec/spec_helper.rb + Rakefile |
UN*X、SSH接続、Vagrantを利用、の設定にしました。spec/, Rakefile が生成されています。
~/.ssh/config へ vagrant への SSH 接続設定を追加
serverspec は ssh 接続でサーバーに入った後にテストを実行するので、事前に vagrant に ssh 接続する設定を ~/.ssh/config に追加しておきます。
1 2 3 |
$ vagrant ssh-config --host host_name |
で、vagrant 仮想サーバーへの ssh 設定を出力してくれるので、以下のようにして ~/.ssh/config に設定を追加する。
1 2 3 |
$ vagrant ssh-config --host centos.vagrant >> ~/.ssh/config |
実際の出力の確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ vagrant ssh-config --host centos.vagrant Host centos.vagrant HostName 127.0.0.1 User vagrant Port 2222 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /Users/username/.vagrant.d/insecure_private_key IdentitiesOnly yes LogLevel FATAL |
SSH接続の確認。
1 2 3 |
$ ssh centos.vagrant |
接続できればOK。
serverspec のテストコードを書く
serverspec-init で作成された httpd_spec.rb を参考にして、nginx 用の spec テストを書きました。
spec/centos.vagrant/nginx_spec.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
require 'spec_helper' describe package('nginx') do it { should be_installed } end describe service('nginx') do it { should be_enabled } it { should be_running } end describe port(80) do it { should be_listening } end describe file('/etc/nginx/conf.d/nginx.conf') do it { should be_file } its(:content) { should match(/server_name webserver\.vagrant;/) } end |
ほぼそのまま英語なので、読めば分かりますね。
serverspec テストの実行
続いて、通常の RSpec テストと同様に serverspec のテストを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ bundle exec rake spec /Users/username/.rbenv/versions/2.1.2/bin/ruby -S rspec spec/centos.vagrant/httpd_spec.rb spec/centos.vagrant/nginx_spec.rb The machine with the name 'centos.vagrant' was not found configured for this Vagrant environment. The machine with the name 'centos.vagrant' was not found configured for this Vagrant environment. ...... Finished in 4.43 seconds 6 examples, 0 failures |
なんか、The machine with the name ‘centos.vagrant’ was not found ~ の警告が出ましたけど、とりあえずテストは6個全て通りました。
これで、サーバーのプロビジョニングにおいても、以下のような TDD/BDD のスタイルで作業を進めることができます。
1. serverspec でテスト(サーバー仕様)を書いてテスト実行 → テストが失敗することを確認
2. プロビジョニング・ツール(Chefなど)を書いてプロビジョニング実行 → テストが成功することを確認
これは、安心感が大きいです。
以上駆け足でしたが、Chef で作成したサーバー環境のテストを行う Serverspec 入門エントリーでした。さてと、これから serverspec ごりごり書いていきまーす!
- – 参考リンク –
- Serverspec – Home
- Serverspec – Resource Types
- serverspecを使ってサーバの状態をテストしてみよう – Tech-Sketch
- VOYAGE GROUP エンジニアブログ : vagrant + chef solo + serverspecでテスト駆動サーバ構築を試してみるテスト
- お試し serverspec – Qiita
- Vagrant + Chef Solo + serverspec + Jenkins でサーバー構築を CI – naoyaのはてなダイアリー
- 【AWS】JenkinsとserverspecでChefのテストを自動化する | Developers.IO
- Packer、Vagrant、Chef Soloで構築した環境をserverspecでテストする – okochangのインフラ日誌
- Chefで書いたレシピをテストする(serverspec) | DEVLAB
- RSpec の関連記事
- FactoryGirlをSpringと共に使う時の注意
- 複数モデルのpost :createをテストするRSpecコード(Controller Spec)
- RSpec3でTime.nowをスタブ化(stub)
- RSpecでJSONによるPOSTリクエストをテスト
- RSpec & Capybara の雑感
- RSpec+Capybaraで同名の複数要素の並び順をテストする
- RSpec3ではrails_helper.rbがrequireされる
- Capybara + Launchy で RSpec テストをブラウザで確認
- CapybaraのwithinをRSpecで使う
- Serverspec(RSpec)のテスト出力に色を付けて見やすくフォーマット
Leave Your Message!