0

我正在尝试使用 net/ssh gem 在我的 Test-Kitchen 实例中查找已安装的包。我做了一个简单的食谱,可以重复使用构建必备的食谱。

这是我的食谱:

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

测试成功,因为表达式匹配。我期待

build-essential             install

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

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

我的厨房实例是 ubuntu 12.04。

谢谢。

4

1 回答 1

0

我猜有些包里有空间,或者类似的东西。

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

所以我会推荐:

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

于 2014-05-06T01:31:14.927 回答