serverspecで特定のパッケージマネージャ(たとえばgem)にパッケージがインストールされてるかどうかをチェックする場合、以下のように書きます。
describe package('bundler') do it { should be_installed.by('gem') } end
ただし、defaultで対応しているのはここに定義されているマネージャのみで、それ以外のマネージャに対応するためには以下のように新たにcheck_is_installed_by_xxx
メソッドを定義してあげる必要があります。今回の自分のケースだとfluent-gem
でのインストールをチェックしたかったので、check_is_installed_by_gem
メソッドを丸っと使わせてもらいました。
class Specinfra::Command::Base::Package class << self def check_is_installed_by_fluent_gem(name, version=nil) regexp = "^#{name}" cmd = "/opt/td-agent/embedded/bin/fluent-gem list --local | grep -iw -- #{escape(regexp)}" cmd = %Q!#{cmd} | grep -w -- "[( ]#{escape(version)}[,)]"! if version cmd end end end
これで以下の記述を使うことが出来ます。
describe package('fluent-plugin-hogehoge') do it { should be_installed.by('fluent_gem') } end