class Net::SSH::Multi::Server

  1. lib/net/ssh/multi/server.rb
Parent: Multi

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.

Included modules

  1. 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

new (master, host, options={})

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
[show source]
# 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

<=> (server)

Gives server definitions a sort order, and allows comparison.

[show source]
# File lib/net/ssh/multi/server.rb, line 79
def <=>(server)
  [host, port, user] <=> [server.host, server.port, server.user]
end
[] (key)

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.

[show source]
# File lib/net/ssh/multi/server.rb, line 63
def [](key)
  (options[:properties] || {})[key]
end
[]= (key, value)

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.

[show source]
# File lib/net/ssh/multi/server.rb, line 69
def []=(key, value)
  (options[:properties] ||= {})[key] = value
end
busy? (include_invisible=false)

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.

[show source]
# File lib/net/ssh/multi/server.rb, line 144
def busy?(include_invisible=false)
  !failed? && session && session.busy?(include_invisible)
end
close ()

Closes this server's session. If the session has not yet been opened, this does nothing.

[show source]
# 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
fail! (flag=true)

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.

[show source]
# File lib/net/ssh/multi/server.rb, line 115
def fail!(flag=true)
  @failed = flag
end
failed? ()

Returns true if this server has ever failed a connection attempt.

[show source]
# File lib/net/ssh/multi/server.rb, line 108
def failed?
  @failed
end
hash ()

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.

[show source]
# File lib/net/ssh/multi/server.rb, line 89
def hash
  @hash ||= [host, user, port].hash
end
inspect ()

Returns a human-readable representation of this server instance.

[show source]
# File lib/net/ssh/multi/server.rb, line 103
def inspect
  @inspect ||= "#<%s:0x%x %s>" % [self.class.name, object_id, to_s]
end
port ()

Returns the port number to use for this connection.

[show source]
# File lib/net/ssh/multi/server.rb, line 74
def port
  options[:port] || 22
end
session (require_session=false)

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]
[show source]
# 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
to_s ()

Returns a human-readable representation of this server instance.

[show source]
# 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