Module: Veewee::Provider::Core::Helper::Tcp
- Included in:
- Box
- Defined in:
- lib/veewee/provider/core/helper/tcp.rb
Instance Method Summary collapse
- #execute_when_tcp_available(ip = "127.0.0.1", options = { }, &block) ⇒ Object
- #get_local_ip ⇒ Object
-
#guess_free_port(min_port, max_port) ⇒ Object
This tries to guess a local free tcp port.
- #host_ip_as_seen_by_guest ⇒ Object
- #is_tcp_port_open?(ip, port) ⇒ Boolean
Instance Method Details
#execute_when_tcp_available(ip = "127.0.0.1", options = { }, &block) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/veewee/provider/core/helper/tcp.rb', line 54 def execute_when_tcp_available(ip="127.0.0.1", = { } , &block) defaults={ :port => 22, :timeout => 2 , :pollrate => 5} =defaults.merge() timeout=[:timeout] timeout=ENV['VEEWEE_TIMEOUT'].to_i unless ENV['VEEWEE_TIMEOUT'].nil? begin Timeout::timeout(timeout) do connected=false while !connected do begin ui.info "trying connection" s = TCPSocket.new(ip, [:port]) s.close block.call(ip); return true rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH,Errno::ENETDOWN sleep [:pollrate] end end end rescue Timeout::Error raise "Timeout connecting to TCP port {options[:port]} exceeded #{timeout} secs." end return false end |
#get_local_ip ⇒ Object
88 89 90 91 92 93 94 95 96 97 |
# File 'lib/veewee/provider/core/helper/tcp.rb', line 88 def get_local_ip orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true # turn off reverse DNS resolution temporarily UDPSocket.open do |s| s.connect '64.233.187.99', 1 s.addr.last end ensure Socket.do_not_reverse_lookup = orig end |
#guess_free_port(min_port, max_port) ⇒ Object
This tries to guess a local free tcp port
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/veewee/provider/core/helper/tcp.rb', line 28 def guess_free_port(min_port,max_port) ui.info "Received port hint - #{min_port}" if definition.force_ssh_port return min_port end guessed_port=nil for port in (min_port..max_port) unless is_tcp_port_open?(get_local_ip, port) guessed_port=port break end end if guessed_port.nil? ui.error "No free port available: tried #{min_port}..#{max_port}" raise Veewee::Error, "No free port available: tried #{min_port}..#{max_port}" else ui.info "Found port #{guessed_port} available" end return guessed_port end |
#host_ip_as_seen_by_guest ⇒ Object
84 85 86 |
# File 'lib/veewee/provider/core/helper/tcp.rb', line 84 def host_ip_as_seen_by_guest get_local_ip end |
#is_tcp_port_open?(ip, port) ⇒ Boolean
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/veewee/provider/core/helper/tcp.rb', line 10 def is_tcp_port_open?(ip, port) begin Timeout::timeout(1) do begin s = TCPSocket.new(ip, port) s.close return true rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH,Errno::ENETDOWN return false end end rescue Timeout::Error end return false end |