class EventMachine::WinRM::Session
Attributes
exit_codes[R]
Public Class Methods
new(options={})
click to toggle source
# File lib/em-winrm/session.rb, line 31 def initialize(options={}) if options[:logger] WinRM::Log.logger = options[:logger] else log_level = options[:log_level] || :info WinRM::Log.level(log_level) end @servers = {} @commands = [] @exit_codes = {} WinRM::Log.debug(":session => :init") end
Public Instance Methods
close()
click to toggle source
clean up servers and stop the EventMachine
event loop
# File lib/em-winrm/session.rb, line 148 def close unbind # try to stop eventmachine loop EM.stop rescue @on_close.call if @on_close WinRM::Log.debug(":session => :close") end
command_complete(host, cid,exit_code)
click to toggle source
called by backend server when it completes a command
# File lib/em-winrm/session.rb, line 116 def command_complete(host, cid,exit_code) WinRM::Log.debug(":command_complete => #{host} with return code #{exit_code}") @commands.delete(cid) @on_command_complete.call(host) if @on_command_complete @exit_codes[host] = exit_code if @commands.compact.size.zero? @on_command_complete.call(:all) if @on_command_complete EM.stop end end
on(*new_servers) { |subsession| ... }
click to toggle source
returns a new EventMachine::WinRM::Session
instance consisting of a specific sub-set of servers
inspired by Net::SSH::Multi::Session.on
# File lib/em-winrm/session.rb, line 90 def on(*new_servers) subsession = self.clone subsession.servers = new_servers & servers yield subsession if block_given? subsession end
on_close(&blk)
click to toggle source
# File lib/em-winrm/session.rb, line 29 def on_close(&blk); @on_close = blk; end
on_command_complete(&blk)
click to toggle source
# File lib/em-winrm/session.rb, line 27 def on_command_complete(&blk); @on_command_complete = blk; end
on_error(&blk)
click to toggle source
# File lib/em-winrm/session.rb, line 26 def on_error(&blk); @on_error = blk; end
on_finish(&blk)
click to toggle source
# File lib/em-winrm/session.rb, line 28 def on_finish(&blk); @on_finish = blk; end
on_output(&blk)
click to toggle source
Proxy Methods
# File lib/em-winrm/session.rb, line 25 def on_output(&blk); @on_output = blk; end
relay_command(data)
click to toggle source
run command on all servers
# File lib/em-winrm/session.rb, line 47 def relay_command(data) EM.epoll EM.run do WinRM::Log.debug(":relay_to_servers => #{data}") servers ||= @servers.values.compact servers.each do |s| operation = proc do WinRM::Log.debug(":relayed => #{s.host}") @commands << s.run_command(data) end EM.defer(operation) end end end
relay_error_from_backend(host, data)
click to toggle source
relay error output from backend server to client
# File lib/em-winrm/session.rb, line 108 def relay_error_from_backend(host, data) WinRM::Log.debug(":relay_error_from_backend => #{[host, data]}") data = @on_error.call(host, data) if @on_error end
relay_output_from_backend(host, data)
click to toggle source
relay output from backend server to client
# File lib/em-winrm/session.rb, line 100 def relay_output_from_backend(host, data) WinRM::Log.debug(":relay_output_from_backend => #{[host, data]}") data = @on_output.call(host, data) if @on_output end
servers()
click to toggle source
return an array of the current servers in the session
# File lib/em-winrm/session.rb, line 72 def servers @servers.values end
servers=(servers)
click to toggle source
set the current servers in the session
# File lib/em-winrm/session.rb, line 79 def servers=(servers) @servers = {} servers.each{|s| @servers[s.host] = s} end
unbind()
click to toggle source
# File lib/em-winrm/session.rb, line 127 def unbind WinRM::Log.debug(":unbind => :connection") # terminate any unfinished connections @servers.values.compact.each do |s| s.unbind end end
unbind_backend(host)
click to toggle source
# File lib/em-winrm/session.rb, line 135 def unbind_backend(host) WinRM::Log.debug(":unbind_backend => #{host}") @servers[host] = nil @on_finish.call(host) if @on_finish if @servers.values.compact.size.zero? @on_finish.call(:all) if @on_finish end end
use(host, options)
click to toggle source
initialize connections to a server
# File lib/em-winrm/session.rb, line 65 def use(host, options) @servers[host] = Server.new(self, host, options) end