--- /dev/null
+module MCollective
+ class Discovery
+ class Mc
+ def self.discover(filter, timeout, limit, client)
+ begin
+ hosts = []
+ Timeout.timeout(timeout) do
+ reqid = client.sendreq("ping", "discovery", filter)
+ Log.debug("Waiting #{timeout} seconds for discovery replies to request #{reqid}")
+
+ loop do
+ reply = client.receive(reqid)
+ Log.debug("Got discovery reply from #{reply.payload[:senderid]}")
+ hosts << reply.payload[:senderid]
+
+ return hosts if limit > 0 && hosts.size == limit
+ end
+ end
+ rescue Timeout::Error => e
+ rescue Exception => e
+ raise
+ ensure
+ client.unsubscribe("discovery", :reply)
+ end
+
+ hosts
+ end
+ end
+ end
+end