Updated mcollective.init according to OSCI-658
[packages/precise/mcollective.git] / plugins / mcollective / discovery / flatfile.rb
diff --git a/plugins/mcollective/discovery/flatfile.rb b/plugins/mcollective/discovery/flatfile.rb
new file mode 100644 (file)
index 0000000..7ce9db7
--- /dev/null
@@ -0,0 +1,40 @@
+# discovers against a flatfile instead of the traditional network discovery
+# the flat file must have a node name per line which should match identities
+# as configured
+module MCollective
+  class Discovery
+    class Flatfile
+      def self.discover(filter, timeout, limit=0, client=nil)
+        unless client.options[:discovery_options].empty?
+          file = client.options[:discovery_options].first
+        else
+          raise "The flatfile discovery method needs a path to a text file"
+        end
+
+        raise "Cannot read the file %s specified as discovery source" % file unless File.readable?(file)
+
+        discovered = []
+
+        hosts = File.readlines(file).map{|l| l.chomp}
+
+        # this plugin only supports identity filters, do regex matches etc against
+        # the list found in the flatfile
+        unless filter["identity"].empty?
+          filter["identity"].each do |identity|
+            identity = Regexp.new(identity.gsub("\/", "")) if identity.match("^/")
+
+            if identity.is_a?(Regexp)
+              discovered = hosts.grep(identity)
+            elsif hosts.include?(identity)
+              discovered << identity
+            end
+          end
+        else
+          discovered = hosts
+        end
+
+        discovered
+      end
+    end
+  end
+end