041865c7e6a5385016b439375678a41e084c309c
[packages/precise/mcollective.git] / lib / mcollective / ddl / discoveryddl.rb
1 module MCollective
2   module DDL
3     # DDL for discovery plugins, a full example can be seen below
4     #
5     # metadata    :name        => "mc",
6     #             :description => "MCollective Broadcast based discovery",
7     #             :author      => "R.I.Pienaar <rip@devco.net>",
8     #             :license     => "ASL 2.0",
9     #             :version     => "0.1",
10     #             :url         => "http://marionette-collective.org/",
11     #             :timeout     => 2
12     #
13     # discovery do
14     #     capabilities [:classes, :facts, :identity, :agents, :compound]
15     # end
16     class DiscoveryDDL<Base
17       def discovery_interface
18         @entities[:discovery]
19       end
20
21       # records valid capabilities for discovery plugins
22       def capabilities(*caps)
23         caps = [caps].flatten
24
25         raise "Discovery plugin capabilities can't be empty" if caps.empty?
26
27         caps.each do |cap|
28           if [:classes, :facts, :identity, :agents, :compound].include?(cap)
29             @entities[:discovery][:capabilities] << cap
30           else
31             raise "%s is not a valid capability, valid capabilities are :classes, :facts, :identity, :agents and :compound" % cap
32           end
33         end
34       end
35
36       # Creates the definition for new discovery plugins
37       #
38       #    discovery do
39       #       capabilities [:classes, :facts, :identity, :agents, :compound]
40       #    end
41       def discovery(&block)
42         raise "Discovery plugins can only have one definition" if @entities[:discovery]
43
44         @entities[:discovery] = {:capabilities => []}
45
46         @current_entity = :discovery
47         block.call if block_given?
48         @current_entity = nil
49       end
50     end
51   end
52 end