class MCollective::Discovery::Mc

Public Class Methods

discover(filter, timeout, limit, client) click to toggle source
   # File lib/mcollective/discovery/mc.rb
 4 def self.discover(filter, timeout, limit, client)
 5   begin
 6     hosts = []
 7     Timeout.timeout(timeout) do
 8       reqid = client.sendreq("ping", "discovery", filter)
 9       Log.debug("Waiting #{timeout} seconds for discovery replies to request #{reqid}")
10 
11       loop do
12         reply = client.receive(reqid)
13         Log.debug("Got discovery reply from #{reply.payload[:senderid]}")
14         hosts << reply.payload[:senderid]
15 
16         return hosts if limit > 0 && hosts.size == limit
17       end
18     end
19   rescue Timeout::Error => e
20   rescue Exception => e
21     raise
22   ensure
23     client.unsubscribe("discovery", :reply)
24   end
25 
26   hosts
27 end