class Blender::Driver::SshMulti

Public Instance Methods

execute(tasks, hosts) click to toggle source
# File lib/blender/drivers/ssh_multi.rb, line 28
def execute(tasks, hosts)
  Log.debug("SSH execution tasks [#{tasks.size}]")
  Log.debug("SSH on hosts [#{hosts.join("\n")}]")
  Array(tasks).each do |task|
    session = create_session(hosts, task.metadata[:concurrency])
    cmd = run_command(task.command, session)
    if cmd.exitstatus != 0 and !task.metadata[:ignore_failure]
      raise ExecutionFailed, cmd.stderr
    end
    session.loop
  end
end

Private Instance Methods

create_session(hosts, concurrency) click to toggle source
# File lib/blender/drivers/ssh_multi.rb, line 43
def create_session(hosts, concurrency)
  error_handler = lambda do |server|
    if config[:ignore_on_failure]
      $!.backtrace.each { |l| Blender::Log.debug(l) }
    else
      throw :go, :raise
    end
  end
  s = Net::SSH::Multi.start(
    concurrent_connections: concurrency,
    on_error: error_handler
  )
  hosts.each do |h|
    s.use(user + '@' + h, config)
  end
  s
end
default_config() click to toggle source
Calls superclass method
# File lib/blender/drivers/ssh_multi.rb, line 61
def default_config
  super.merge(concurrency: 5)
end