2014-02-10 82 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}\"")

相關問題