Help us understand the problem. What is going on with this article?

Serverspec本読書メモ 1章〜3.4章まで

More than 3 years have passed since last update.


オライリーのServerspec本のどくしょかんそうぶんです

1章 Serverspecの紹介

  • Serverspec : サーバの状態をRspec記法のコードにより自動的にテストするためのツール
  • 利用目的
    • TDDによるインフラコード開発
    • サーバ構築後の確認作業の自動化
    • サーバ監視に使う人も居る → そんな人もいるのか
    • サーバのあるべき状態の抽象化
  • 本質 : テスト駆動によりインフラコードの開発やリファクタリングを促進する
  • 必要性
    • TDDで、infrastructure as code を進めるため
    • サーバの状態をServerspecが保証することで、リファクタリングがやりやすくなる
  • 開発の哲学
    • 導入の敷居を下げる
      • Ruby1.8.7をサポート → RHEL6系でデフォルトのRubyであるため
    • 特定のサーバ管理ツールに依存しない
      • 構成管理ツールのライフサイクルより、テストコードのライフサイクルの方が長いであろうという哲学
    • 1つのことを上手くやる
      • サーバのテストをやるだけ → 複雑で多機能なツールは使われづらい
      • 並列実行はRakeに任せている
  • 究極の目標
    • システムの継続的改善に寄与すること

2章 はじめてのServerspec

  • serverspec-init はサンプルコードを生成するだけで、実践向きではない
    • あくまでサンプル
  • Rakefile
    • テストの実行に必須ではない
    • ただし、Serverspecは1つのプロセスで複数のホストを扱うことを考慮していない
    • Rakeを利用してホスト毎にタスクを分ける
  • spec_helper.rb
    • Rspecと同様に、serverspecの挙動を制御する

3章 Serverspecの本格利用

  • あえて expext ではなく ワンライナー should 記法を推奨している
    • 最も直感的にかけるため
    • テストが通ったか、通らなかったか? だけを求めているので自然言語風に記述にこだわりがない
    • shouldだけ覚えていれば使えるようにしたい
    • Rspecの記法のバリエーションの隆盛に振り回されたくない
      • わかる
    • ちなみにRspec3で非推奨になるのは Object#should でワンライナー should 記法は残る
describe packege('nginx') do
  it { should be_installed }
end

3.2 リソースとリソースタイプ

describe packege('nginx') do
  it { should be_installed }
end

リソース : 具体的な個別テストの対象

  • 上記の場合 packege('nginx') がテスト対象となるリソース

リソースタイプ : リソースの種類

  • 上記の場合 packege('nginx') リソースのリソースタイプは、 packege

ServerspecではSSH経由でテストを実行する場合、デフォルトで sudo をつけている

3.4 テスト対象ホストの追加

serverspec-init で生成される Rakefile では以下のように設定している

namespace :spec do
  targets = []
  Dir.glob('./spec/*').each do |dir|
    next unless File.directory?(dir)
    target = File.basename(dir)
    target = "_#{target}" if target == "default"
    targets << target
  end

spec以下のディレクトリ構成はこんな感じ

$tree
.
├── spec_helper.rb
└── #{サーバ名}
    └── sample_spec.rb
  • なので、テスト対象のホストを増やしたい時は、spec 以下にサーバ名のディレクトリを増やせば良い
  • また、Rakefileの当該部分を書き換えることで、別の方法でテスト対象を増やすことも可能
    • 例えば AWS の API を叩くとか、consulを使うとか
kasei-san
小林の中の人 長文はblogに。QiitaにはちょっとしたTIPSを
http://kasei-san.hatenablog.com/
lclco
業界最大手高速バス料金比較サイト「バス比較なび」やLCCなど飛行機との比較ができる「格安移動」を運営
https://www.lclco.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away