2014-02-10 65 views
0

我正在尝试使用net/ssh gem来查找已安装的软件包到我的Test-Kitchen实例中。我做一个简单的配方,重用构建必要的食谱。如何使用net/ssh gem来知道包是否已安装?

这是我的食谱:

node['my-cookbook']['packages'].each do |pkg| 
    package pkg 
end 

而这些是我的属性:

default['my-cookbook']['packages'] = %w[build-essential git bison] 

这些都是一些步骤转化为我的黄瓜功能定义。

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被安装并且黄瓜测试成功了。

输出

puts @out 

当时

grep: build-essential: No such file or directory 

试验是成功的,因为expresion匹配。我期待

build-essential    install 

这里发生了什么? 未安装软件包时,控制台响应一个空字符串。

如何检查是否使用net/ssh gem将特定软件包安装到我的厨房实例中?

我的kithen实例是Ubuntu 12.04。

谢谢。

+0

你为什么要使用Net :: SSH?为什么不使用像serverspec或bats这样的busser。请格式化您的代码。 – sethvargo

+0

我怎样才能在黄瓜内使用serverspec? – Robert

+0

你不知道。不要使用黄瓜... – sethvargo

回答

0

我猜在某些软件包或某些类似软件中有空间。

如果是这种情况,build-essential将作为grep的第二个参数,在这种情况下,grep会尝试打开它作为一个文件,当然不存在。

因此,我建议:

@out = ssh.exec!("dpkg --get-selections | grep \"#{package}\"")

相关问题