背景
Serverspecを見る機会があったのでこの機会に入門する。IaCのテストってすごく難しいと思っていてどこからどこまでやるかみたいな線引きがよく分からないとかもある。記事的には具体的なServerspecの使い方よりも各プロダクトでどんな使われ方してるのかを見てまとめられれば良いかなといった感じ。
概要
Serverspecとは
Serverspec(サーバスペック)とは、サーバ状態のテスト自動化フレームワーク。UNIX/LinuxサーバとWindowsサーバに対応している。構築したサーバ環境が意図した通りに構成されているかについて自動的に確認作業を行えたりする。IaCの先のフェーズとかで出てくるイメージ。個人的な感覚ではあるがいままで手動で行なう必要があったサーバ構成の確認(テスト)をスクリプトにより自動化することができるツールぐらいのイメージ。
Serverspecは、Rubyで実装されていてRubyがある環境ならwindowsでも動くらしい。windows -> linuxのテストみたいなことも可能とのこと。リリース頻度自体はそこまで高くは無いもののメンテナンスはされている模様。作者は宮下 剛輔という日本の方(https://twitter.com/gosukenator)
Serverspec is not ServerSpec.ってツイートもあるがこれは間違えそうというかちょっと調べているだけでもこう書かれている記事が散見されたので結構間違ってる人いるんだろうなと感じた。(ElasticSearch的な感じかな)
公式サイトもある
導入するとできること
Serverspec自体は主に以下のような目的で使われる
- テスト駆動によるインフラのコード開発
- サーバ構築後の確認作業の自動化
- 稼働しているサーバの監視
- サーバの再起動時の状態確認
サーバーにエージェントなどをインストールする必要がないのがとても便利そうでした。
セットアップ/サンプル
以下でインストールできる。
$ gem install serverspec
serverspec-init
で初期化
$ serverspec-init Select OS type: 1) UN*X 2) Windows Select number: 1 Select a backend type: 1) SSH 2) Exec (local) Select number: 2 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
sample_spec.rb
にテストを記述する
require 'spec_helper' describe "gitについてのテスト" do context "環境設定" do describe package('git'), :if => os[:family] == 'redhat' do it "インストールされている" do expect be_installed end end end end describe "git-coreについてのテスト" do context "環境設定" do describe package('git-core'), :if => os[:family] == 'redhat' do it "インストールされている" do expect be_installed end end end end describe "httpdについてのテスト" do context "環境設定" do describe package('httpd'), :if => os[:family] == 'redhat' do it "インストールされている" do expect be_installed end it "enabledされている" do expect be_enabled end it "runningされている" do expect be_running end end end end describe "portについてのテスト" do context "環境設定" do describe port(80) do it "listeningされている" do expect be_listening end end end end
rake specで実行できる
$ rake spec