Module: Meroku::Tunnelable
- Included in:
- Node
- Defined in:
- lib/meroku/tunnelable.rb
Overview
Gives object the ability to execute bash commands on itself via ssh
Instance Method Summary collapse
-
#tunnel_run(cmd) ⇒ Object
rubocop:disable Metrics/AbcSize,Metrics/MethodLength.
Instance Method Details
#tunnel_run(cmd) ⇒ Object
rubocop:disable Metrics/AbcSize,Metrics/MethodLength
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/meroku/tunnelable.rb', line 5 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 |