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

23
ポリドックに Serverspec を教 えよう! 2015-03-07 (Sat) となか (@ftnk)

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

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

ポリドックにServerspecを教

えよう!

2015-03-07 (Sat)となか (@ftnk)

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

agenda1. Serverspec とは2. Serverspec を触ってみる3. Advanced Tips4. Specinfra を見てみる5. 番外編:Infrataster6. テストを書く polidog をながめる

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

Serverspec とは

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

Serverspec とは

● Serverspec は『サーバの状態』をコードにより自動的にテストするためのツール

● 元々は Puppet マニフェストをリファクタリングするために開発された

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

Serverspec の用途

1. テスト駆動によるインフラコード開発2. サーバ構築後の確認作業の自動化3. 稼動しているサーバの監視4. サーバ再起動後の状態確認5. サーバのあるべき状態の抽象化

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

Serverspec を触ってみる

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

Serverspec のインストール

Ruby と gem の使える環境で

$ gem install --user-install serverspec

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

テンプレートの作成

serverspec-init コマンドでテンプレートを作成する。

$ serverspec-init

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

$ tree ..├── Rakefile└── spec ├── localhost │ └── sample_spec.rb └── spec_helper.rb

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

$ rake -Trake spec:localhost # Run serverspec tests to localhost

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

Serverspec の実行

全てのタスクを実行

$ rake

特定のタスクのみ実行

$ rake spec:localhost

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

あとは以下を見ながら必要なテストを書くだけ

Serverspec - Resource Types http://serverspec.org/resource_types.html

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

Advanced Tips

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

Adbanced TipsServerspec - Advanced Tips http://serverspec.org/advanced_tips.html

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

テストを使い回す

● 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○ ホスト毎にプロパティを設定して、テストに値を埋め込ま

ない

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

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' }

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

sudo● spec_helper.rb での設定

○ set :disable_sudo, true

● describe 単位での設定○ describe command('whoami'), :sudo => false do

it { should return_stdout 'vagrant' }end

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

テスト対象の情報を得る

● os helper method○ os['family']○ os['release']○ os['arch']

● host inventry○ http://serverspec.org/host_inventory.html

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

Specinfra を見てみる

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

● ある設定を確認するためのリソースタイプがなくても、command リソースタイプでなんとかなります。

● でも、専用のリソースタイプがあると便利ですよね?

→リソースタイプを追加しましょう

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

Specinfra を見てみる

● lib/specinfra/command あたりを見る

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

番外編:Infrataster

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

Infrataster● Infrastructure Behavior Testing Framework

○ http■ uri■ capybara

● poltergeist○ PhantomJS (Headless WebKit)

○ MySQL○ PostgreSQL○ DNS

● https://github.com/ryotarai/infrataster