lib/kumogata/post_processing.rb in kumogata-0.4.0 vs lib/kumogata/post_processing.rb in kumogata-0.4.1
- old
+ new
@@ -109,10 +109,12 @@
validate_command_template(name, ssh['user'], outputs)
if options and not options.kind_of?(Hash)
raise "Invalid post processing ssh options: #{name} => #{options.inspect}"
end
+
+ ssh['request_pty'] = !!((ssh['request_pty'] || true).to_s =~ /\Atrue\Z/)
end
def run_command(attrs, outputs)
command, ssh = attrs.values_at(:command, :ssh)
@@ -134,37 +136,46 @@
connect_tries = (ssh['connect_tries'] || 36).to_i
retry_interval = (ssh['retry_interval'] || 5).to_i
stderr_orig = nil
+ ssh_exec_opts = {:request_pty => ssh['request_pty']}
begin
stderr_orig = STDERR.dup
STDERR.reopen('/dev/null', 'w')
begin
retryable(:tries => connect_tries, :on => Net::SSH::Disconnect, :sleep => retry_interval) do
- Net::SSH.start(*args) {|ssh| ssh_exec!(ssh, command) }
+ Net::SSH.start(*args) {|ssh| ssh_exec!(ssh, command, ssh_exec_opts) }
end
rescue Net::SSH::HostKeyMismatch => e
e.remember_host!
retry
end
ensure
STDERR.reopen(stderr_orig)
end
end
- def ssh_exec!(ssh, command)
+ def ssh_exec!(ssh, command, options)
stdout_data = ''
stderr_data = ''
exit_code = nil
#exit_signal = nil
stdout_stream = create_stdout_stream
stderr_stream = create_stderr_stream
ssh.open_channel do |channel|
+ if options[:request_pty]
+ channel.request_pty do |ch, success|
+ unless success
+ raise "Couldn't obtain pty (ssh.channel.request_pty)"
+ end
+ end
+ end
+
channel.exec(command) do |ch, success|
unless success
raise "Couldn't execute command #{command.inspect} (ssh.channel.exec)"
end