読者です 読者をやめる 読者になる 読者になる

Serverspec の Host Inventory を使ってファイルシステムをテストする

Serverspec

Serverspec でファイルシステムのテスト(EC2 にアタッチした ELB に対して resize2fs が実行されているかを確認するテスト)を書こうと思っていて,最初は df + sed + awk で頑張って書こうと思っていたけど,よくよく調べたら Serverspec には Host Inventory と呼ばれる機能があって,サクッと解決することができた.

serverspec.org

ebs_spec.rb

デバイスパスは適宜変えてもらうとして,host_inventory['filesystem']['/dev/xvde']['kb_size'] で割り当てられてるサイズ (KB) を取得することができた.また df を実行するとわかる通り,実際に表示されるサイズは少し小さくなっていて,今回は 2% を誤差の閾値として考慮するテストにした.

あと運用上使っているテストは複数ホストを対象にしているため,host_inventory['hostname'] からホスト名を取得して,別途 { ホスト名: 期待値 } を定義したハッシュから期待値を取得するようにしている.ホスト名じゃなくてロール名の場合も基本的には同じかと.

require 'spec_helper'

describe 'Check filesystem size' do
  # 期待値となるサイズを KB 単位で取得する
  expected_size_kb = 50 * 1024 * 1024

  # 期待値と実測値の差を KB 単位で取得する
  size_difference_kb = expected_size_kb - host_inventory['filesystem']['/dev/xvde']['kb_size'].to_i

  # 実測値は EBS の指定値より少なくなるため、期待値の 2% を誤差として判断する
  it { expect(size_difference_kb).to be <= (expected_size_kb * 0.02).to_i }
end

実行結果

$ bundle exec rake spec:xxx

Check filesystem size
  should be <= 1048576

1 examples, 0 failures

Host Inventory

今回は

  • host_inventory['filesystem']
  • host_inventory['hostname']

を使ったけど,他にも様々な Host Inventory も取得できて,自由度高く Serverspec が書けるなと驚いた.

  • host_inventory['cpu']
  • host_inventory['memory']
  • host_inventory['ec2']

関連記事

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com