ポリドックにServerspecを教えよう!
Transcript of ポリドックにServerspecを教えよう!
ポリドックにServerspecを教
えよう!
2015-03-07 (Sat)となか (@ftnk)
agenda1. Serverspec とは2. Serverspec を触ってみる3. Advanced Tips4. Specinfra を見てみる5. 番外編:Infrataster6. テストを書く 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 -Trake spec:localhost # Run serverspec tests to localhost
Serverspec の実行
全てのタスクを実行
$ rake
特定のタスクのみ実行
$ rake spec:localhost
あとは以下を見ながら必要なテストを書くだけ
Serverspec - Resource Types http://serverspec.org/resource_types.html
Advanced Tips
Adbanced TipsServerspec - 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