serverspecの出力結果を少し見やすくする
RSpecに馴染みがないからか、serverspecの出力結果(特にエラーは)は正直見づらい。もちろん全てパスするのが前提だから、failした時点でそれどうなのよって話なんだけど、サーバの台数やテストの数が多いと結構おかしなところが見つかる。(そして目を細めて画面を見てあーここかーって)
何かいい方法はないものかと思っていたところ、Rebuild ep29 でrspec
に-fs
というオプションを渡すと自然言語っぽいアウトプットになるといういいこと(常識?)を聞いたのでserverspecで試してみた。
調べたところやり方が2通りあって、コマンドラインで SPEC_OPTS="--format doc"
を渡すかRakefile
に直書きすればいいらしい。(ドキュメントでは-fd [--format documentation]
と書いてあったけど-fs
でも同じ結果になった。)
$ rake serverspec SPEC_OPTS="-fd"
または
require 'rake' require 'rspec/core/rake_task' require 'json' properties = JSON.parse(File.read('target.json')) desc "Run serverspec to all hosts" task :serverspec => 'serverspec:all' namespace :serverspec do task :all => properties.keys.map {|key| 'serverspec:' + key} properties.keys.each do |key| desc "Run serverspec to #{key}" RSpec::Core::RakeTask.new(key.to_sym) do |t| t.rspec_opts = ['--format documentation'] #ここ ENV['TARGET_HOST'] = key puts "HOSTNAME: #{key}" t.pattern = 'spec/{' + properties[key]["roles"].join(',') + '}/*_spec.rb' end end end
といった感じでオプションが渡せる。
これでserverspecを実行すると以下のように一覧が追加されて見やすくなった。
$ rake serverspec SPEC_OPTS="-fd" HOSTNAME: 192.168.1.2 /Users/me/.rbenv/versions/2.0.0-p247/bin/ruby -S rspec spec/common/base_spec.rb spec/common/hw_spec.rb Command "uname -i" should return stdout "x86_64" SELinux should be disabled File "/etc/resolv.conf" should contain /127\.0\.0\.1/ should contain /8\.8\.8\.8/ should contain /8\.8\.4\.4/ Command "fdisk -lu | grep ^\/dev | sort -k1 | head -n2" should return stdout /2048/ (FAILED - 1) should return stdout /2101247/ (FAILED - 2) should return stdout /1049600/ (FAILED - 3) should return stdout /2101248/ (FAILED - 4) Cron should have entry "0 5 * * * /root/bin/foo.sh" (FAILED - 5) Cron should have entry "*/30 * * * * /root/bin/bar.sh" (FAILED - 6) Command "svstat /service/dnscache | awk '{print $2}'" should return stdout "up" Command "svstat /service/dnscache | awk '{print $5}'" should return stdout /^\d\d\d+$/ Port "53" should be listening Service "ntpd" should be enabled should be running Port "123" should be listening File "/etc/ntp.conf" should contain "time.somewhere.com" Command "getconf _NPROCESSORS_ONLN" should return stdout "8" Command "dmidecode --type memory | grep Size | awk '{sum += $2}END{print sum}'" should return stdout "4096" (FAILED - 7) Interface "eth0" speed should eq 1000 (FAILED - 8) Interface "eth1" speed should eq 1000 (FAILED - 9) .....
ついでにspec_helper.rb
で色を付けると更に見やすくなる。
RSpec.configure do |c| ... c.color_enabled = true ... end
こういうオプションとかルビーストにとっては当たり前のことかもしれないけど、ChefやserverspecからRubyを触り出した僕はその当たり前が分からないので辛い。
参考
http://qiita.com/snaka/items/e0808f9cfbad87c49b4e
https://www.relishapp.com/rspec/rspec-core/v/2-14/docs/command-line/format-option