Serverspec at hbstudy #45
Upcoming SlideShare
Loading in...5
×
 

Serverspec at hbstudy #45

on

  • 10,476 views

 

Statistics

Views

Total Views
10,476
Views on SlideShare
9,698
Embed Views
778

Actions

Likes
55
Downloads
79
Comments
0

16 Embeds 778

http://blog.livedoor.jp 287
https://twitter.com 283
http://koudaiii.hatenablog.com 153
https://openlink.to 20
http://www.arfadia.com 7
http://blog.hifumi.info 7
http://www.arfadia.net 5
http://rss.ameba.jp 4
http://sechiro.hatenablog.com 3
http://s.deeeki.com 2
http://blog.hatena.ne.jp 2
http://webcache.googleusercontent.com 1
http://cloud.feedly.com 1
http://openlink.to 1
http://www.feedspot.com 1
http://ab-sn5.tumblr.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Serverspec at hbstudy #45 Serverspec at hbstudy #45 Presentation Transcript

  • serverspechbstudy #452013/06/21Gosuke Miyashita
  • 自己紹介
  • 宮下 剛輔mizzy.org@gosukenator
  • paperboy&co.テクニカルマネージャー
  • 理学部情報工学科の三年生
  • 学割でGitHub Micro Plan無料です
  • Amazon Student入ってます
  • hbstudy #8Puppetのススメ
  • サーバプロビジョニング
  • Cloud or VMImageLaunchOSInstallSystemConfigurationProvisioning Toolchain by Lee Thompson at Velocity 2010Application ServiceOrchestrationBootstrappingConfigurationOrchestrationCapistranoFabricPuppetChefEC2OpenStack
  • サーバプロビジョニングとテスト
  • 監視とは継続的なテストであるby @kazuho
  • Cloud or VMImageLaunchOSInstallSystemConfigurationApplication ServiceOrchestrationBootstrappingConfigurationOrchestrationNagiosZabbixserverspec???
  • Zabbix/NagiosによるApacheのテスト(監視)httpdプロセスが動いているか80番ポートに外からアクセスできるか80番ポートが正しいレスポンスを返すか
  • serverspecによるApacheのテストhttpdプロセスが動いているか80番ポートをListenしているかhttpdパッケージが入っているか自動起動するようになっているか設定ファイルが存在するか正しい設定がされているか
  • Orchestration領域のテストZabbixNagiosConfiguration領域のテストserverspec
  • Configurationとテスト
  • みなさんどうやってますか?
  • シェルコマンド叩く?シェルスクリプト?実際にサービスにアクセスする?
  • ConfigurationManagementFramework
  • ConfigurationManagement Frameworkとテスト
  • これはテストどうやってますか?
  • シェルコマンド叩く?シェルスクリプト?実際にサービスにアクセスする?
  • この界隈は様々なテストツールが存在
  • シンタックスチェックFoodcriticknife cookbook testpuppet-lint
  • ユニットテストChefspecrspec-puppet
  • 結合テストMinitest Chef HandlerCucumber ChefTest Kitchenrspec-systemserverspec
  • Infrastructure as Codeからの自然な流れ
  • これだけテストツールが存在するのになぜわざわざserverspecをつくったのか?
  • 既存ツールは機能が多すぎたり、特定のツールに依存してたりするのがイヤ
  • PuppetやChef使っていてそもそもserverspecって必要?
  • そもそもPuppetやChefにテストって必要?
  • 一度書いたマニフェストやレシピを更新しないのであればたぶん不要
  • マニフェストやレシピを継続的に更新するなら必要
  • プログラムのリファクタリングと一緒
  • 継続的に更新するならテストも継続的に実行する必要がある
  • なのでテストを自動化することが必要
  • テストコード自体もメンテナンスが必要
  • なのでテストコードの読みやすさや書きやすさも重要
  • テストツール自体のシンプルさも重要
  • severspec
  • サーバのテストを簡潔に書くための仕組み
  • サーバのテストをRSpecで記述
  • RSpec?
  • Rubyのテストフレームワーク
  • describe Array, "when empty" dobefore do@empty_array = []endit "should be empty" do@empty_array.should be_emptyendit "should size 0" do@empty_array.size.should == 0endend
  • @empty_array.should be_empty@empty_array.should_not be_empty
  • serverspecによるテスト
  • describe package(httpd) doit { should be_installed }enddescribe service(httpd) doit { should be_enabled }it { should be_running }enddescribe port(80) doit { should be_listening }end
  • 最近推奨の書き方expect(file ‘/etc/passwd’).to be_file非推奨な書き方file(‘/etc/passwd’).should be_file
  • テストコードが簡単に書けて結果がわかりやすくても内部が複雑なら意味がない
  • serverspecは基本的にシェルコマンド叩いてチェックしてるだけ
  • テスト対象のサーバにSSHで接続してコマンドを叩く
  • シェルコマンド実行によるサーバのテストをスマートにやれるようにしたのがserverspec
  • serverspecの始め方
  • # yum install rubygems# gem install serverspec rake# serverspec-init# rake spec
  • デモ
  • serverspecが産まれた経緯
  • 2007年
  • Puppetを導入することにした
  • Puppetでサーバ構築は自動化できた
  • じゃあテストはどうしよう?
  • AssurerというPerl製のツールを書いた
  • Assurerは面倒すぎて実用には耐えなかった
  • テスト駆動サーバ構築のことはしばらく忘れた
  • 2013年
  • Puppetマニフェストのリファクタリングをやろうと思った
  • コードをリファクタリングするならテスト必要だろ
  • rspec-pupetはモジュールのテストにしか使えない
  • Puppet適用後の実際のサーバの状態をテストしたい
  • @hibomaが何かやってたそういえばhttp://d.hatena.ne.jp/hiboma/20130513/1368411746
  • それパクろうそしてgemにしよう
  • serverspec誕生
  • もう少し詳しいserverspecの話
  • リソースタイプ
  • command cron default_gatewayfile group host ipfilter ipnatiptables kernel_modulelinux_kernel_parrameter packageport routing_table selinuxservice user zfshttp://serverspec.org/resource_types.html
  • 複数OSサポート
  • DebianGentooRed HatSolarisDarwin
  • rootユーザじゃない場合はsudoつけてコマンド実行(SSHの場合のみExec ではつけない)
  • PATHの追加設定できます
  • spec/spec_helper.rb でRSpec.configure do |c|c.path = ‘/sbin:/usr/sbin:$PATH’…end
  • describe package(‘serverspec) dolet(:path){‘/usr/local/rbenv/shims:$PATH’}it { should be_installed.by(‘gem’) }end
  • pre_command
  • describe package(‘serverspec) dolet(:path){‘/usr/local/rbenv/shims:$PATH’}let(:pre_command) {‘eval ‚$(rbenv init -)‛’}it { should be_installed.by(‘gem’) }end
  • サーバ単位じゃなくロール単位でのテスト
  • サーバ固有属性を扱う
  • 詳しくはウェブでhttp://mizzy.org/http://serverspec.org/
  • インフラの継続的インテグレーション
  • プログラム内部の話
  • describe file(‘/etc/passwd’) doit { should be_file }endが実行されるとどうなるか(Exec Backend の場合)
  • この辺が主に呼ばれるserverspec/type/file.rbserverspec/backend/exec.rbserverspec/commands/redhat.rb実際にコードを見てみましょう
  • SSH の場合は?Backend::Exec の代わりに Backend::Sshが呼ばれる
  • chain する場合は?describe package(serverspec) doit { should be_installed.by(gem) }endmatchers/be_installed.rb が呼ばれる
  • serverspec自身のテスト
  • テストコードは2パターンコマンドのテストリソースマッチャのテスト
  • コマンドのテストserverspecがテストのために実行するシェルコマンドが正しく生成されるかどうかをチェック
  • リソースマッチャのテストテスト用シェルコマンドが実行されたという「仮定」の元で、リソースのテストが想定通りの結果
  • GitHub でのコントリビュート1. フォークする2. ブランチをつくるgit checkout –b my-new-feature3. コード書いてコミットしてプッシュgit push origin my-new-feature4. プルリクエストを送る
  • プルリクエストは日本語でOK途中状態でいったんプルリクしてくれてもOKあとからまたpushすればいいその場合は頭に[WIP]とつけてください動作確認は自分が使ってるOSだけでOK完璧に実装しなくて大丈夫ですテストコードも書いてもらえるとうれしいです書き方わからなければお気軽に相談を
  • プルリクエストはお気軽に
  • まとめ
  • serverspecは読みやすい書きやすいわかりやすい
  • 要するに簡潔
  • 簡潔さ超重要
  • ビジネス要件は絶えず変化する
  • それに伴いシステムも変化し複雑に
  • 複雑さと変化に対応するためには継続的なテスト重要
  • テストコード自体もシステムに伴い変化し複雑になる
  • なのでできるだけ簡潔に記述できることが重要
  • serverspecとは
  • 現実のシステムの複雑さと変化に対応するために
  • システムのあるべき状態を簡潔に記述し継続的にテストするためのもの
  • おまけ
  • おしまい