X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=doc%2Fclasses%2FMCollective%2FDiscovery.html;fp=doc%2Fclasses%2FMCollective%2FDiscovery.html;h=bd1690c830cc0498504fe79c3bcffadc33ae03a4;hb=d1f1649ba43c5cbc43c4beb2380096ba051d646a;hp=0000000000000000000000000000000000000000;hpb=8a3fe7daeecccf43dd71c59371c5005400d35101;p=packages%2Fprecise%2Fmcollective.git diff --git a/doc/classes/MCollective/Discovery.html b/doc/classes/MCollective/Discovery.html new file mode 100644 index 0000000..bd1690c --- /dev/null +++ b/doc/classes/MCollective/Discovery.html @@ -0,0 +1,512 @@ + + + + + + Class: MCollective::Discovery + + + + + + + + + + +
+ + + + + + + + + + + + + + +
ClassMCollective::Discovery
In: + + lib/mcollective/discovery.rb + +
+
Parent: + Object +
+
+ + +
+ + + +
+ + + +
+ +
+

Methods

+ + +
+ +
+ + + + +
+ + + + + + + + + +
+

Public Class methods

+ +
+ + + + +
+

[Source]

+
+
+   # File lib/mcollective/discovery.rb, line 3
+3:     def initialize(client)
+4:       @known_methods = find_known_methods
+5:       @default_method = Config.instance.default_discovery_method
+6:       @client = client
+7:     end
+
+
+
+
+ +

Public Instance methods

+ +
+ + + + +
+

+Agent filters are always present no matter what, +so we cant raise an error if the capabilities suggest the discovery method +cant do agents we just have to rely on the discovery plugin to not do +stupid things in the presense of a agent filter +

+

[Source]

+
+
+    # File lib/mcollective/discovery.rb, line 62
+62:     def check_capabilities(filter)
+63:       capabilities = ddl.discovery_interface[:capabilities]
+64: 
+65:       unless capabilities.include?(:classes)
+66:         raise "Cannot use class filters while using the '%s' discovery method" % discovery_method unless filter["cf_class"].empty?
+67:       end
+68: 
+69:       unless capabilities.include?(:facts)
+70:         raise "Cannot use fact filters while using the '%s' discovery method" % discovery_method unless filter["fact"].empty?
+71:       end
+72: 
+73:       unless capabilities.include?(:identity)
+74:         raise "Cannot use identity filters while using the '%s' discovery method" % discovery_method unless filter["identity"].empty?
+75:       end
+76: 
+77:       unless capabilities.include?(:compound)
+78:         raise "Cannot use compound filters while using the '%s' discovery method" % discovery_method unless filter["compound"].empty?
+79:       end
+80:     end
+
+
+
+
+ +
+ + + + +
+

[Source]

+
+
+    # File lib/mcollective/discovery.rb, line 47
+47:     def ddl
+48:       @ddl ||= DDL.new(discovery_method, :discovery)
+49: 
+50:       # if the discovery method got changed we might have an old DDL cached
+51:       # this will detect that and reread the correct DDL from disk
+52:       unless @ddl.meta[:name] == discovery_method
+53:         @ddl = DDL.new(discovery_method, :discovery)
+54:       end
+55: 
+56:       return @ddl
+57:     end
+
+
+
+
+ +
+ + + + +
+

[Source]

+
+
+     # File lib/mcollective/discovery.rb, line 127
+127:     def discover(filter, timeout, limit)
+128:       raise "Limit has to be an integer" unless limit.is_a?(Fixnum)
+129: 
+130:       force_discovery_method_by_filter(filter)
+131: 
+132:       check_capabilities(filter)
+133: 
+134:       discovered = discovery_class.discover(filter, discovery_timeout(timeout, filter), limit, @client)
+135: 
+136:       if limit > 0
+137:         return discovered[0,limit]
+138:       else
+139:         return discovered
+140:       end
+141:     end
+
+
+
+
+ +
+ + + + +
+

[Source]

+
+
+    # File lib/mcollective/discovery.rb, line 39
+39:     def discovery_class
+40:       method = discovery_method.capitalize
+41: 
+42:       PluginManager.loadclass("MCollective::Discovery::#{method}") unless self.class.const_defined?(method)
+43: 
+44:       self.class.const_get(method)
+45:     end
+
+
+
+
+ +
+ + + + +
+

[Source]

+
+
+    # File lib/mcollective/discovery.rb, line 21
+21:     def discovery_method
+22:       method = "mc"
+23: 
+24:       if @client.options[:discovery_method]
+25:         method = @client.options[:discovery_method]
+26:       else
+27:         method = @default_method
+28:       end
+29: 
+30:       raise "Unknown discovery method %s" % method unless has_method?(method)
+31: 
+32:       unless method == "mc"
+33:         raise "Custom discovery methods require direct addressing mode" unless Config.instance.direct_addressing
+34:       end
+35: 
+36:       return method
+37:     end
+
+
+
+
+ +
+ + + + +
+

[Source]

+
+
+     # File lib/mcollective/discovery.rb, line 117
+117:     def discovery_timeout(timeout, filter)
+118:       timeout = ddl.meta[:timeout] unless timeout
+119: 
+120:       unless (filter["compound"] && filter["compound"].empty?)
+121:         timeout + timeout_for_compound_filter(filter["compound"])
+122:       else
+123:         timeout
+124:       end
+125:     end
+
+
+
+
+ +
+ + + + +
+

[Source]

+
+
+    # File lib/mcollective/discovery.rb, line 9
+ 9:     def find_known_methods
+10:       PluginManager.find("discovery")
+11:     end
+
+
+
+
+ +
+ + + + +
+

[Source]

+
+
+    # File lib/mcollective/discovery.rb, line 17
+17:     def force_direct_mode?
+18:       discovery_method != "mc"
+19:     end
+
+
+
+
+ +
+ + + + +
+

+checks if compound filters are used and then forces the ‘mc’ +discovery plugin +

+

[Source]

+
+
+    # File lib/mcollective/discovery.rb, line 83
+83:     def force_discovery_method_by_filter(filter)
+84:       unless discovery_method == "mc"
+85:         unless filter["compound"].empty?
+86:           Log.info "Switching to mc discovery method because compound filters are used"
+87:           @client.options[:discovery_method] = "mc"
+88: 
+89:           return true
+90:         end
+91:       end
+92: 
+93:       return false
+94:     end
+
+
+
+
+ +
+ + + + +
+

[Source]

+
+
+    # File lib/mcollective/discovery.rb, line 13
+13:     def has_method?(method)
+14:       @known_methods.include?(method)
+15:     end
+
+
+
+
+ +
+ + + + +
+

+if a compound filter is specified and it has any function then we read the +DDL for each of those plugins and sum up the timeout +declared in the DDL +

+

[Source]

+
+
+     # File lib/mcollective/discovery.rb, line 99
+ 99:     def timeout_for_compound_filter(compound_filter)
+100:       return 0 if compound_filter.nil? || compound_filter.empty?
+101: 
+102:       timeout = 0
+103: 
+104:       compound_filter.each do |filter|
+105:         filter.each do |statement|
+106:           if statement["fstatement"]
+107:             pluginname = Data.pluginname(statement["fstatement"]["name"])
+108:             ddl = DDL.new(pluginname, :data)
+109:             timeout += ddl.meta[:timeout]
+110:           end
+111:         end
+112:       end
+113: 
+114:       timeout
+115:     end
+
+
+
+
+ + +
+ + +
+ + +
+

[Validate]

+
+ + + \ No newline at end of file