我正在尝试使用net/ssh gem在我的Test-Kitchen实例中查找已安装的包。我做了一个简单的食谱,重用了构建必备的食谱。
这是我的食谱:
node['my-cookbook']['packages'].each do |pkg|
package pkg
end这些是我的属性:
default['my-cookbook']['packages'] = %w[build-essential git bison]这些是我对cucumber的特征定义的一些步骤。
When(/^I ask for (.*)$/) do |package|
Net::SSH.start(@infrastructure['my-app'].ip,'vagrant', password: 'vagrant') do |ssh|
@out = ssh.exec!("dpkg --get-selections | grep #{package}")
end
end
Then(/^I should see (.*)$/) do |package_respond|
puts @out
@out.should match package_respond
end当实例收敛时,安装了build-essential,并且cucumber测试成功。
输出
puts @out曾经是
grep: build-essential: No such file or directory测试是成功的,因为表达匹配。我正期待着
build-essential install这里发生何事??如果没有安装程序包,控制台将以空字符串响应。
如何使用net/ssh gem检查特定的包是否已安装到我的厨房实例中?
我的kithen实例是ubuntu 12.04。
谢谢。
发布于 2014-05-06 09:31:15
我猜在一些包中有一个空间,或者类似的东西。
如果是这样的话,build-essential将作为grep的第二个参数出现,在这种情况下,grep将尝试将其作为一个文件打开,而这个文件当然不存在。
因此,我建议:
@out = ssh.exec!("dpkg --get-selections | grep \"#{package}\"")
https://stackoverflow.com/questions/21681642
复制相似问题