class Knife::Pkg::ShellCommand
Public Class Methods
exec(cmd, session, password = '')
click to toggle source
# File lib/knife-pkg/shell_command.rb, line 21 def self.exec(cmd, session, password = '') stdout_data, stderr_data = "", "" exit_code, exit_signal = nil, nil session.open_channel do |channel| channel.request_pty channel.exec(cmd) do |_, success| raise RuntimeError, "Command \"#{@cmd}\" could not be executed!" if !success channel.on_data do |_, data| if data =~ /^knife sudo password: / Chef::Log.debug("sudo password required, sending password") if password.respond_to?(:call) channel.send_data(password.call + "\n") else channel.send_data(password + "\n") end else stdout_data += data end end channel.on_extended_data do |_,_,data| stderr_data += data end channel.on_request("exit-status") do |_,data| exit_code = data.read_long end channel.on_request("exit-signal") do |_, data| exit_signal = data.read_long end end end session.loop result = ShellCommandResult.new(cmd, stdout_data, stderr_data, exit_code.to_i) raise_error!(result) unless result.succeeded? return result end
raise_error!(result)
click to toggle source
# File lib/knife-pkg/shell_command.rb, line 64 def self.raise_error!(result) raise RuntimeError, "Command failed! #{result.to_s}" end