Sha256: bdf99eaf719912033897aec1bc34ac70f4737ac5f3fe197d3031dbf05915d7ca

Contents?: true

Size: 1.11 KB

Versions: 9

Compression:

Stored size: 1.11 KB

Contents

module Meroku
  # Gives object the ability to execute bash commands on itself via ssh
  module Tunnelable
    # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
    def tunnel_run(cmd)
      retries = 0
      begin
        code = nil
        Net::SSH.start(@tunnel_ip,
                       @tunnel_username,
                       keys: @tunnel_key_name,
                       verify_host_key: false) do |ssh|
          ssh.open_channel do |channel|
            puts cmd
            channel.exec cmd do |ch, success|
              raise "could not execute command" unless success
              ch.on_data { |_c, data| print data }
              ch.on_extended_data { |_c, _type, data| print data }
              ch.on_request("exit-status") { |_ch, data| code = data.read_long }
            end
          end.wait
        end
        abort "#{cmd} returned #{code} !!" if code != 0
      rescue Net::SSH::ConnectionTimeout
        puts "Net::SSH::ConnectionTimeout" && retry if (retries += 1) < 3
      rescue Errno::ECONNREFUSED
        puts "Net::SSH::ConnectionTimeout" && retry if (retries += 1) < 3
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
meroku-2.0.19 lib/meroku/tunnelable.rb
meroku-2.0.18 lib/meroku/tunnelable.rb
meroku-2.0.17 lib/meroku/tunnelable.rb
meroku-2.0.16 lib/meroku/tunnelable.rb
meroku-2.0.14 lib/meroku/tunnelable.rb
meroku-2.0.13 lib/meroku/tunnelable.rb
meroku-2.0.11 lib/meroku/tunnelable.rb
meroku-2.0.10 lib/meroku/tunnelable.rb
meroku-2.0.9 lib/meroku/tunnelable.rb