【问题标题】:How can use net/ssh gem to know if a package was installed?如何使用 net/ssh gem 知道是否安装了包?
【发布时间】:2014-05-06 09:31:14
【问题描述】:

我正在尝试使用 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 来检查我的厨房实例中是否安装了特定的软件包?

我的 kithen 实例是 ubuntu 12.04。

谢谢。

【问题讨论】:

  • 为什么要使用 Net::SSH?为什么不使用像 serverspec 或 bats 这样的 busser。请同时格式化您的代码。
  • 我如何在黄瓜中使用 serverspec ??
  • 你没有。不要使用黄瓜...

标签: ssh grep dpkg net-ssh test-kitchen


【解决方案1】:

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

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

所以我会推荐:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    相关资源
    最近更新 更多