lib/serverspec/helper.rb in serverspec-0.0.2 vs lib/serverspec/helper.rb in serverspec-0.0.3
- old
+ new
@@ -1,9 +1,52 @@
+require 'net/ssh'
+require 'etc'
+
module Serverspec
module Helper
def ssh_exec(host, cmd, opt={})
- `ssh root@#{host} -o'StrictHostKeyChecking no' -o'UserKnownHostsFile /dev/null' #{cmd}`
+ options = Net::SSH::Config.for(host)
+ user = options[:user] || Etc.getlogin
+
+ ret = {}
+ Net::SSH.start(host, user, options) do |ssh|
+ ret = ssh_exec!(ssh, cmd)
+ end
+ ret
end
+
+ private
+ def ssh_exec!(ssh, command)
+ stdout_data = ''
+ stderr_data = ''
+ exit_code = nil
+ exit_signal = nil
+ ssh.open_channel do |channel|
+ channel.exec(command) do |ch, success|
+ unless success
+ abort "FAILED: couldn't execute command (ssh.channel.exec)"
+ end
+ channel.on_data do |ch,data|
+ stdout_data += data
+ end
+
+ channel.on_extended_data do |ch,type,data|
+ stderr_data += data
+ end
+
+ channel.on_request("exit-status") do |ch,data|
+ exit_code = data.read_long
+ end
+
+ channel.on_request("exit-signal") do |ch, data|
+ exit_signal = data.read_long
+ end
+ end
+ end
+ ssh.loop
+ { :stdout => stdout_data, :stderr => stderr_data, :exit_code => exit_code, :exit_signal => exit_signal }
+ end
+
end
module RedHatHelper
def commands
Serverspec::Commands::RedHat.new