クックブックで、Rds::Checks クラスを定義しました。このクラスは、bash/execute リソースと Guard 用の UNIX コマンドを構築するためのメソッドを共有します。libraries/checks.rb ファイルのサンプルは次のとおりです。
module Rds
class Checks
class << self
def ssh_config_entry_present host, config_file, key_name
"cat #{config_file} | grep #{key_name}"
end
def redmine_migrated user, pass, name
"if [ `mysql -u#{user} -p#{pass} -e 'select count(id) FROM #{name}.users;' | sed -n '2 p'` -gt 0 ]; then echo '0'; else echo '1'; fi"
end
end
end
end
LWPR プロバイダー、レシピ、chefspec テストでは、ファイルは問題なくロードされますが、serverspec 内で使用するとkitchen verify
エラーが発生します。
paolo@tower:~/cookbooks/rds$ cat test/integration/install/serverspec/localhost/install_spec.rb
...
it 'do migrations' do
cmd = Rds::Checks.redmine_migrated
expect(command(cmd).stdout).to eq 0
end
...
paolo@tower:~/cookbooks/rds$ kitchen verify
...
NameError:
uninitialized constant Rds
bash/sh コマンドを共通のレイヤーでビルドするメソッドを保持して、個別にテストできるようにし、単体テストと統合テストでそれらを気にしないようにしたいと本当に思っています。