Updated mcollective.init according to OSCI-658
[packages/precise/mcollective.git] / plugins / mcollective / discovery / mc.rb
diff --git a/plugins/mcollective/discovery/mc.rb b/plugins/mcollective/discovery/mc.rb
new file mode 100644 (file)
index 0000000..efd1d82
--- /dev/null
@@ -0,0 +1,30 @@
+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