ポリドックにServerspecを教
えよう!
2015-03-07 (Sat)
となか (@ftnk)
agenda
1. Serverspec とは
2. Serverspec を触ってみる
3. Advanced Tips
4. Specinfra を見てみる
5. 番外編:Infrataster
6. テストを書く polidog をながめる
Serverspec とは
Serverspec とは
● Serverspec は『サーバの状態』をコードにより
自動的にテストするためのツール
● 元々は Puppet マニフェストをリファクタリングす
るために開発された
Serverspec の用途
1. テスト駆動によるインフラコード開発
2. サーバ構築後の確認作業の自動化
3. 稼動しているサーバの監視
4. サーバ再起動後の状態確認
5. サーバのあるべき状態の抽象化
Serverspec を触っ
てみる
Serverspec のインストール
Ruby と gem の使える環境で
$ gem install --user-install serverspec
テンプレートの作成
serverspec-init コマンドでテンプレートを作成す
る。
$ serverspec-init
$ tree .
.
├── Rakefile
└── spec
├── localhost
│ └── sample_spec.rb
└── spec_helper.rb
$ rake -T
rake spec:localhost # Run serverspec tests to
localhost
Serverspec の実行
全てのタスクを実行
$ rake
特定のタスクのみ実行
$ rake spec:localhost
あとは以下を見ながら必要なテストを書くだけ
Serverspec - Resource Types http:
//serverspec.org/resource_types.html
Advanced Tips
Adbanced Tips
Serverspec - Advanced Tips http://serverspec.
org/advanced_tips.html
テストを使い回す
● How to share Serverspec tests among hosts
○ role を定義して、role を使い回す
● How to use Serverspec tests as shared
behaviors
○ RSpec の shared behaviors を使う
● How to use host specific properties
○ ホスト毎にプロパティを設定して、テストに値を埋め込ま
ない
PATH
● PATH environment variable
○ spec_helper.rb に
set :path, '/sbin:/usr/local/sbin:$PATH'
● Block scoped PATH environment variable
○ describe 内に
let(:path) { '/usr/local/rbenv/shims' }
sudo
● spec_helper.rb での設定
○ set :disable_sudo, true
● describe 単位での設定
○ describe command('whoami'), :sudo => false do
it { should return_stdout 'vagrant' }
end
テスト対象の情報を得る
● os helper method
○ os['family']
○ os['release']
○ os['arch']
● host inventry
○ http://serverspec.org/host_inventory.html
Specinfra を
見てみる
● ある設定を確認するためのリソースタイプがなく
ても、command リソースタイプでなんとかなり
ます。
● でも、専用のリソースタイプがあると便利ですよ
ね?
→リソースタイプを追加しましょう
Specinfra を見てみる
● lib/specinfra/command あたりを見る
番外編:
Infrataster
Infrataster
● Infrastructure Behavior Testing Framework
○ http
■ uri
■ capybara
● poltergeist
○ PhantomJS (Headless WebKit)
○ MySQL
○ PostgreSQL
○ DNS
● https://github.com/ryotarai/infrataster

ポリドックにServerspecを教えよう!