こんにちは!beardです!
今回は、ServerspecでHDD(EBS)の容量をServerspecでディスクサイズ(EBS)をテストする方法をご紹介します。
Serverspecにはディスクサイズを直接取得し、確認する方法がありませんので少し工夫してLinuxコマンドを入力する必要があります。
1. テストする環境
今回はディスクのサイズをテストするだけのテスト内容となっております。テスト対象のサーバをymlファイルに記述しています。
Rakefileとspec/spec_helper.rbのファイルは「Serverspecでサーバ情報をファイルに保存してテストする方法」の記事と同じです。
テスト対象のディスクサイズが7GBより大きいことをテストします。
ディレクトリ構成
1 2 3 4 5 6 7 |
Serverspec ├Rakefile ├server.yml ←テスト対象の情報を記述 ├spec |└spec_helper.rb └ common └disk_spec.rb ←ディスク容量のテスト内容。今回使います。 |
server.ymlの内容
1 2 3 |
54.64.126.211: :roles: - common |
spec/common/disk_spec.rbの内容
1 2 3 4 5 |
require 'spec_helper' describe command("size=`df -k |grep /dev/xv | awk '{printf (\"%4.0f\", $2/1024/1024)}'`; test $size -gt 7 ; echo $?") do it { should return_stdout /0/ } end |
2. 実行します。
1 2 3 4 5 6 7 |
rake spec Enter Servers.yml(full path): /etc/serverspec/server.yml /usr/bin/ruby2.0 -S rspec spec/common/disk_spec.rb . Finished in 0.01427 seconds 1 example, 0 failures |
spec/common/disk_spec.rbの解説
前述したとおりServerspecには、ResourceTypeが定義されています。
このResourceTypeに用意されているものは簡単な構文でテスト項目を設定することができますが、ディスクサイズは用意されておりません。
したがって、「describe command」でLinuxコマンドを入力し、その標準出力を受け取って正常かどうかを判断しています。
このspec/common/disk_spec.rbを細かく区切って説明すると以下の用になります。
1 2 3 |
size=`df -k |grep /dev/xv | awk '{printf (\"%4.0f\", $2/1024/1024)}'`←ディスクサイズを表示させ/dev/xvのデバイスの合計容量をGB単位で取りだしてsize変数に格納します。(\はエスケープシーケンス) test $size -gt 7 ←size変数がtestコマンドで7以上かどうか判別します。 echo $? ←testコマンドの結果を表示させます。真なら0、偽なら1が出力されます。 |
なぜ、ディスクの容量を「何GBより大きい」という条件で判定しているか説明します。
EBSをマネジメントコンソール上で100GiBと設定しても、「df –h」コマンドで表示させたとき99GBと表示されてしまうので、ある程度曖昧にしてあります。
また、EBSの容量を増やしていったときにピッタリと比例しませんので何GB以上となるように範囲で判定するようにしております。
いかがでしたか。
Linuxコマンドとその結果を判定することで、ハードウェア性能をServerspecでテストしてみました。
次回もお楽しみに!!