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