Sha256: e3ac533e7452eb6cd56a6bac7602c30b590b76eb7bca1ad37ac35d1d35e7c508

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 KB

Contents

require 'fog'
require 'fog/core/ssh'

# Monkey-patch Fog 1.3.1 to stream SSH output
# (in real time) to stdout.
class Fog::SSH::Real
  def run(commands)
    commands = [*commands]
    results  = []
    begin
      Net::SSH.start(@address, @username, @options) do |ssh|
        commands.each do |command|
          result = Fog::SSH::Result.new(command)
          ssh.open_channel do |ssh_channel|
            ssh_channel.request_pty
            ssh_channel.exec(command) do |channel, success|
              unless success
                raise "Could not execute command: #{command.inspect}"
              end

              channel.on_data do |ch, data|
                result.stdout << data
                puts data
              end

              channel.on_extended_data do |ch, type, data|
                next unless type == 1
                result.stderr << data
                puts data
              end

              channel.on_request('exit-status') do |ch, data|
                result.status = data.read_long
              end

              channel.on_request('exit-signal') do |ch, data|
                result.status = 255
              end
            end
          end
          ssh.loop
          results << result
        end
      end
    rescue Net::SSH::HostKeyMismatch => exception
      exception.remember_host!
      sleep 0.2
      retry
    end
    results
  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
fucking_shell_scripts-0.99 lib/ext/fog.rb
elzar-0.2.0 lib/elzar/fog.rb