Class: Infrataster::Server
- Inherits:
-
Object
- Object
- Infrataster::Server
- Defined in:
- lib/infrataster/server.rb
Constant Summary collapse
- Error =
Class.new(StandardError)
Instance Attribute Summary collapse
-
#address ⇒ Object
readonly
Returns the value of attribute address.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
Class Method Summary collapse
- .clear_defined_servers ⇒ Object
- .define(*args) ⇒ Object
- .defined_servers ⇒ Object
- .find_by_name(name) ⇒ Object
Instance Method Summary collapse
- #from ⇒ Object
- #gateway_on_from_server(port) ⇒ Object
- #gateway_open(host, port) ⇒ Object
-
#initialize(name, address, options = {}) ⇒ Server
constructor
A new instance of Server.
- #open_gateway_on_from_server(port) ⇒ Object
- #ssh_gateway ⇒ Object
- #ssh_start_args ⇒ Object
- #with_ssh_gateway ⇒ Object
Constructor Details
#initialize(name, address, options = {}) ⇒ Server
37 38 39 |
# File 'lib/infrataster/server.rb', line 37 def initialize(name, address, = {}) @name, @address, @options = name, address, end |
Instance Attribute Details
#address ⇒ Object (readonly)
Returns the value of attribute address.
35 36 37 |
# File 'lib/infrataster/server.rb', line 35 def address @address end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
35 36 37 |
# File 'lib/infrataster/server.rb', line 35 def name @name end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
35 36 37 |
# File 'lib/infrataster/server.rb', line 35 def @options end |
Class Method Details
.clear_defined_servers ⇒ Object
20 21 22 |
# File 'lib/infrataster/server.rb', line 20 def clear_defined_servers @@servers = [] end |
.define(*args) ⇒ Object
12 13 14 |
# File 'lib/infrataster/server.rb', line 12 def define(*args) @@servers << Server.new(*args) end |
.defined_servers ⇒ Object
16 17 18 |
# File 'lib/infrataster/server.rb', line 16 def defined_servers @@servers end |
Instance Method Details
#from ⇒ Object
41 42 43 44 45 |
# File 'lib/infrataster/server.rb', line 41 def from if @options[:from] Server.find_by_name(@options[:from]) end end |
#gateway_on_from_server(port) ⇒ Object
96 97 98 99 100 101 102 103 104 105 |
# File 'lib/infrataster/server.rb', line 96 def gateway_on_from_server(port) if from from.gateway_open(@address, port) do |new_port| Logger.debug("tunnel: localhost:#{new_port} -> #{from.address} -> #{@address}:#{port}") yield '127.0.0.1', new_port end else yield @address, port end end |
#gateway_open(host, port) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/infrataster/server.rb', line 63 def gateway_open(host, port) # find available local port server = TCPServer.new('127.0.0.1', 0) local_port = server.addr[1] server.close if block_given? with_ssh_gateway do |gateway| gateway.open(host, port, local_port) do |port| yield port end end else gateway, gateway_finalize_proc = ssh_gateway port = gateway.open(host, port, local_port) finalize_proc = Proc.new do gateway.close(port) gateway_finalize_proc.call end [port, finalize_proc] end end |
#open_gateway_on_from_server(port) ⇒ Object
86 87 88 89 90 91 92 93 94 |
# File 'lib/infrataster/server.rb', line 86 def open_gateway_on_from_server(port) if from new_port, finalize_proc = from.gateway_open(@address, port) Logger.debug("tunnel: localhost:#{new_port} -> #{from.address} -> #{@address}:#{port}") ['127.0.0.1', new_port, finalize_proc] else [@address, port, nil] end end |
#ssh_gateway ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/infrataster/server.rb', line 47 def ssh_gateway gateway = Net::SSH::Gateway.new(*ssh_start_args) finalize_proc = Proc.new do gateway.shutdown! end [gateway, finalize_proc] end |
#ssh_start_args ⇒ Object
107 108 109 |
# File 'lib/infrataster/server.rb', line 107 def ssh_start_args @ssh_start_args ||= _ssh_start_args end |
#with_ssh_gateway ⇒ Object
56 57 58 59 60 61 |
# File 'lib/infrataster/server.rb', line 56 def with_ssh_gateway gateway, finalize_proc = ssh_gateway yield gateway ensure finalize_proc.call end |