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.
Methods
Public Class
Public Instance
Included modules
- Comparable
Attributes
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. |
Public Class methods
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:
-
:via => a Net::SSH::Gateway instance to use when establishing a connection to this server.
-
:user => the name of the user to use when logging into this server.
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 def initialize(master, host, options={}) @master = master @options = options.dup @user, @host, port = host.match(/^(?:([^;,:=]+)@|)(.*?)(?::(\d+)|)$/)[1,3] user_opt, port_opt = @options.delete(:user), @options.delete(:port) @user = @user || user_opt || master.default_user port ||= port_opt @options[:port] = port.to_i if port @gateway = @options.delete(:via) @failed = false end
Public Instance methods
Gives server definitions a sort order, and allows comparison.
# File lib/net/ssh/multi/server.rb, line 79 def <=>(server) [host, port, user] <=> [server.host, server.port, server.user] end
Returns the value of the server property with the given key. Server properties are described via the :properties key in the options hash when defining the Server.
# File lib/net/ssh/multi/server.rb, line 63 def [](key) (options[:properties] || {})[key] end
Sets the given key/value pair in the :properties key in the options hash. If the options hash has no :properties key, it will be created.
# File lib/net/ssh/multi/server.rb, line 69 def []=(key, value) (options[:properties] ||= {})[key] = value end
Returns true if the session has been opened, and the session is currently busy (as defined by Net::SSH::Connection::Session#busy?). Also returns false if the server has failed to connect.
# File lib/net/ssh/multi/server.rb, line 144 def busy?(include_invisible=false) !failed? && session && session.busy?(include_invisible) end
Closes this server's session. If the session has not yet been opened, this does nothing.
# File lib/net/ssh/multi/server.rb, line 150 def close session.close if session ensure master.server_closed(self) if session @session = nil 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 def fail!(flag=true) @failed = flag end
Returns true if this server has ever failed a connection attempt.
# File lib/net/ssh/multi/server.rb, line 108 def failed? @failed 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 def hash @hash ||= [host, user, port].hash end
Returns a human-readable representation of this server instance.
# File lib/net/ssh/multi/server.rb, line 103 def inspect @inspect ||= "#<%s:0x%x %s>" % [self.class.name, object_id, to_s] end
Returns the port number to use for this connection.
# File lib/net/ssh/multi/server.rb, line 74 def port options[:port] || 22 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 def session(require_session=false) return @session if @session || !require_session @session ||= master.next_session(self) end
Returns a human-readable representation of this server instance.
# File lib/net/ssh/multi/server.rb, line 94 def to_s @to_s ||= begin s = "#{user}@#{host}" s << ":#{options[:port]}" if options[:port] s end end