Class | Net::SSH::Multi::Server |
In: |
lib/net/ssh/multi/server.rb
|
Parent: | Object |
Encapsulates the connection information for a single remote server, as well as the Net::SSH session corresponding to that information. You‘ll rarely need to instantiate one of these directly: instead, you should use Net::SSH::Multi::Session#use.
== | -> | eql? |
gateway | [R] | The Net::SSH::Gateway instance to use to establish the connection. Will be nil if the connection should be established without a gateway. |
host | [R] | The host name (or IP address) of the server to connect to. |
master | [R] | The Net::SSH::Multi::Session instance that manages this server instance. |
options | [R] | The Hash of additional options to pass to Net::SSH when connecting (including things like :password, and so forth). |
user | [R] | The user name to use when logging into the server. |
Creates a new Server instance with the given connection information. The master argument must be a reference to the Net::SSH::Multi::Session instance that will manage this server reference. The options hash must conform to the options described for Net::SSH::start, with two additions:
The host argument may include the username and port number, in which case those values take precedence over similar values given in the options:
server = Net::SSH::Multi::Server.new(session, 'user@host:1234') puts server.user #-> user puts server.port #-> 1234
# File lib/net/ssh/multi/server.rb, line 43 43: def initialize(master, host, options={}) 44: @master = master 45: @options = options.dup 46: 47: @user, @host, port = host.match(/^(?:([^;,:=]+)@|)(.*?)(?::(\d+)|)$/)[1,3] 48: 49: user_opt, port_opt = @options.delete(:user), @options.delete(:port) 50: 51: @user = @user || user_opt || master.default_user 52: port ||= port_opt 53: 54: @options[:port] = port.to_i if port 55: 56: @gateway = @options.delete(:via) 57: @failed = false 58: end
Gives server definitions a sort order, and allows comparison.
# File lib/net/ssh/multi/server.rb, line 79 79: def <=>(server) 80: [host, port, user] <=> [server.host, server.port, server.user] 81: end
Indicates (by default) that this server has just failed a connection attempt. If flag is false, this can be used to reset the failed flag so that a retry may be attempted.
# File lib/net/ssh/multi/server.rb, line 115 115: def fail!(flag=true) 116: @failed = flag 117: end
Returns true if this server has ever failed a connection attempt.
# File lib/net/ssh/multi/server.rb, line 108 108: def failed? 109: @failed 110: end
Generates a Fixnum hash value for this object. This function has the property that +a.eql?(b)+ implies +a.hash == b.hash+. The hash value is used by class Hash. Any hash value that exceeds the capacity of a Fixnum will be truncated before being used.
# File lib/net/ssh/multi/server.rb, line 89 89: def hash 90: @hash ||= [host, user, port].hash 91: end
Returns a human-readable representation of this server instance.
# File lib/net/ssh/multi/server.rb, line 103 103: def inspect 104: @inspect ||= "#<%s:0x%x %s>" % [self.class.name, object_id, to_s] 105: end
Returns the Net::SSH session object for this server. If require_session is false and the session has not previously been created, this will return nil. If require_session is true, the session will be instantiated if it has not already been instantiated, via the gateway if one is given, or directly (via Net::SSH::start) otherwise.
if server.session.nil? puts "connecting..." server.session(true) end
Note that the sessions returned by this are "enhanced" slightly, to make them easier to deal with in a multi-session environment: they have a :server property automatically set on them, that refers to this object (the Server instance that spawned them).
assert_equal server, server.session[:server]
# File lib/net/ssh/multi/server.rb, line 136 136: def session(require_session=false) 137: return @session if @session || !require_session 138: @session ||= master.next_session(self) 139: end