1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6 <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
8 <title>Module: MCollective::PluginManager</title>
10 <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
12 <script src="../js/jquery.js" type="text/javascript"
13 charset="utf-8"></script>
14 <script src="../js/thickbox-compressed.js" type="text/javascript"
15 charset="utf-8"></script>
16 <script src="../js/quicksearch.js" type="text/javascript"
17 charset="utf-8"></script>
18 <script src="../js/darkfish.js" type="text/javascript"
19 charset="utf-8"></script>
25 <div id="file-metadata">
26 <div id="file-list-section" class="section">
27 <h3 class="section-header">In Files</h3>
28 <div class="section-body">
31 <li><a href="../lib/mcollective/pluginmanager_rb.html?TB_iframe=true&height=550&width=785"
32 class="thickbox" title="lib/mcollective/pluginmanager.rb">lib/mcollective/pluginmanager.rb</a></li>
41 <div id="class-metadata">
46 <!-- Namespace Contents -->
49 <!-- Method Quickref -->
51 <div id="method-list-section" class="section">
52 <h3 class="section-header">Methods</h3>
53 <ul class="link-list">
55 <li><a href="#M000075">::<<</a></li>
57 <li><a href="#M000080">::[]</a></li>
59 <li><a href="#M000079">::clear</a></li>
61 <li><a href="#M000081">::create_instance</a></li>
63 <li><a href="#M000076">::delete</a></li>
65 <li><a href="#M000082">::find</a></li>
67 <li><a href="#M000083">::find_and_load</a></li>
69 <li><a href="#M000085">::grep</a></li>
71 <li><a href="#M000077">::include?</a></li>
73 <li><a href="#M000084">::loadclass</a></li>
75 <li><a href="#M000078">::pluginlist</a></li>
81 <!-- Included Modules -->
85 <div id="project-metadata">
88 <div id="fileindex-section" class="section project-section">
89 <h3 class="section-header">Files</h3>
92 <li class="file"><a href="../COPYING.html">COPYING</a></li>
94 <li class="file"><a href="../Gemfile.html">Gemfile</a></li>
96 <li class="file"><a href="../README.html">README</a></li>
98 <li class="file"><a href="../Rakefile.html">Rakefile</a></li>
100 <li class="file"><a href="../etc/client_cfg_dist.html">client.cfg.dist</a></li>
102 <li class="file"><a href="../etc/data-help_erb.html">data-help.erb</a></li>
104 <li class="file"><a href="../etc/discovery-help_erb.html">discovery-help.erb</a></li>
106 <li class="file"><a href="../etc/facts_yaml_dist.html">facts.yaml.dist</a></li>
108 <li class="file"><a href="../etc/metadata-help_erb.html">metadata-help.erb</a></li>
110 <li class="file"><a href="../etc/msg-help_erb.html">msg-help.erb</a></li>
112 <li class="file"><a href="../etc/rpc-help_erb.html">rpc-help.erb</a></li>
114 <li class="file"><a href="../etc/server_cfg_dist.html">server.cfg.dist</a></li>
116 <li class="file"><a href="../etc/ssl/PLACEHOLDER.html">PLACEHOLDER</a></li>
118 <li class="file"><a href="../etc/ssl/clients/PLACEHOLDER.html">PLACEHOLDER</a></li>
120 <li class="file"><a href="../lib/mcollective/generators/templates/action_snippet_erb.html">action_snippet.erb</a></li>
122 <li class="file"><a href="../lib/mcollective/generators/templates/data_input_snippet_erb.html">data_input_snippet.erb</a></li>
124 <li class="file"><a href="../lib/mcollective/generators/templates/ddl_erb.html">ddl.erb</a></li>
126 <li class="file"><a href="../lib/mcollective/generators/templates/plugin_erb.html">plugin.erb</a></li>
128 <li class="file"><a href="../lib/mcollective/locales/en_yml.html">en.yml</a></li>
130 <li class="file"><a href="../mcollective_init.html">mcollective.init</a></li>
136 <div id="classindex-section" class="section project-section">
137 <h3 class="section-header">Class Index
138 <span class="search-toggle"><img src="../images/find.png"
139 height="16" width="16" alt="[+]"
140 title="show/hide quicksearch" /></span></h3>
141 <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
143 <legend>Quicksearch</legend>
144 <input type="text" name="quicksearch" value=""
145 class="quicksearch-field" />
149 <ul class="link-list">
151 <li><a href="../MCollective.html">MCollective</a></li>
153 <li><a href="../MCollective/Agent.html">MCollective::Agent</a></li>
155 <li><a href="../MCollective/Agents.html">MCollective::Agents</a></li>
157 <li><a href="../MCollective/Aggregate.html">MCollective::Aggregate</a></li>
159 <li><a href="../MCollective/Aggregate/Base.html">MCollective::Aggregate::Base</a></li>
161 <li><a href="../MCollective/Aggregate/Result.html">MCollective::Aggregate::Result</a></li>
163 <li><a href="../MCollective/Aggregate/Result/Base.html">MCollective::Aggregate::Result::Base</a></li>
165 <li><a href="../MCollective/Aggregate/Result/CollectionResult.html">MCollective::Aggregate::Result::CollectionResult</a></li>
167 <li><a href="../MCollective/Aggregate/Result/NumericResult.html">MCollective::Aggregate::Result::NumericResult</a></li>
169 <li><a href="../MCollective/Application.html">MCollective::Application</a></li>
171 <li><a href="../MCollective/Applications.html">MCollective::Applications</a></li>
173 <li><a href="../MCollective/Cache.html">MCollective::Cache</a></li>
175 <li><a href="../MCollective/Client.html">MCollective::Client</a></li>
177 <li><a href="../MCollective/CodedError.html">MCollective::CodedError</a></li>
179 <li><a href="../MCollective/Config.html">MCollective::Config</a></li>
181 <li><a href="../MCollective/Connector.html">MCollective::Connector</a></li>
183 <li><a href="../MCollective/Connector/Base.html">MCollective::Connector::Base</a></li>
185 <li><a href="../MCollective/DDL.html">MCollective::DDL</a></li>
187 <li><a href="../MCollective/DDL/AgentDDL.html">MCollective::DDL::AgentDDL</a></li>
189 <li><a href="../MCollective/DDL/Base.html">MCollective::DDL::Base</a></li>
191 <li><a href="../MCollective/DDL/DataDDL.html">MCollective::DDL::DataDDL</a></li>
193 <li><a href="../MCollective/DDL/DiscoveryDDL.html">MCollective::DDL::DiscoveryDDL</a></li>
195 <li><a href="../MCollective/DDL/ValidatorDDL.html">MCollective::DDL::ValidatorDDL</a></li>
197 <li><a href="../MCollective/DDLValidationError.html">MCollective::DDLValidationError</a></li>
199 <li><a href="../MCollective/Data.html">MCollective::Data</a></li>
201 <li><a href="../MCollective/Data/Base.html">MCollective::Data::Base</a></li>
203 <li><a href="../MCollective/Data/Result.html">MCollective::Data::Result</a></li>
205 <li><a href="../MCollective/Discovery.html">MCollective::Discovery</a></li>
207 <li><a href="../MCollective/Facts.html">MCollective::Facts</a></li>
209 <li><a href="../MCollective/Facts/Base.html">MCollective::Facts::Base</a></li>
211 <li><a href="../MCollective/Generators.html">MCollective::Generators</a></li>
213 <li><a href="../MCollective/Generators/AgentGenerator.html">MCollective::Generators::AgentGenerator</a></li>
215 <li><a href="../MCollective/Generators/Base.html">MCollective::Generators::Base</a></li>
217 <li><a href="../MCollective/Generators/DataGenerator.html">MCollective::Generators::DataGenerator</a></li>
219 <li><a href="../MCollective/InvalidRPCData.html">MCollective::InvalidRPCData</a></li>
221 <li><a href="../MCollective/Log.html">MCollective::Log</a></li>
223 <li><a href="../MCollective/Logger.html">MCollective::Logger</a></li>
225 <li><a href="../MCollective/Logger/Base.html">MCollective::Logger::Base</a></li>
227 <li><a href="../MCollective/Logger/Console_logger.html">MCollective::Logger::Console_logger</a></li>
229 <li><a href="../MCollective/Logger/File_logger.html">MCollective::Logger::File_logger</a></li>
231 <li><a href="../MCollective/Logger/Syslog_logger.html">MCollective::Logger::Syslog_logger</a></li>
233 <li><a href="../MCollective/Matcher.html">MCollective::Matcher</a></li>
235 <li><a href="../MCollective/Matcher/Parser.html">MCollective::Matcher::Parser</a></li>
237 <li><a href="../MCollective/Matcher/Scanner.html">MCollective::Matcher::Scanner</a></li>
239 <li><a href="../MCollective/Message.html">MCollective::Message</a></li>
241 <li><a href="../MCollective/MissingRPCData.html">MCollective::MissingRPCData</a></li>
243 <li><a href="../MCollective/MsgDoesNotMatchRequestID.html">MCollective::MsgDoesNotMatchRequestID</a></li>
245 <li><a href="../MCollective/MsgTTLExpired.html">MCollective::MsgTTLExpired</a></li>
247 <li><a href="../MCollective/NotTargettedAtUs.html">MCollective::NotTargettedAtUs</a></li>
249 <li><a href="../MCollective/Optionparser.html">MCollective::Optionparser</a></li>
251 <li><a href="../MCollective/PluginManager.html">MCollective::PluginManager</a></li>
253 <li><a href="../MCollective/PluginPackager.html">MCollective::PluginPackager</a></li>
255 <li><a href="../MCollective/PluginPackager/AgentDefinition.html">MCollective::PluginPackager::AgentDefinition</a></li>
257 <li><a href="../MCollective/PluginPackager/StandardDefinition.html">MCollective::PluginPackager::StandardDefinition</a></li>
259 <li><a href="../MCollective/RPC.html">MCollective::RPC</a></li>
261 <li><a href="../MCollective/RPC/ActionRunner.html">MCollective::RPC::ActionRunner</a></li>
263 <li><a href="../MCollective/RPC/Agent.html">MCollective::RPC::Agent</a></li>
265 <li><a href="../MCollective/RPC/Audit.html">MCollective::RPC::Audit</a></li>
267 <li><a href="../MCollective/RPC/Client.html">MCollective::RPC::Client</a></li>
269 <li><a href="../MCollective/RPC/Helpers.html">MCollective::RPC::Helpers</a></li>
271 <li><a href="../MCollective/RPC/Progress.html">MCollective::RPC::Progress</a></li>
273 <li><a href="../MCollective/RPC/Reply.html">MCollective::RPC::Reply</a></li>
275 <li><a href="../MCollective/RPC/Request.html">MCollective::RPC::Request</a></li>
277 <li><a href="../MCollective/RPC/Result.html">MCollective::RPC::Result</a></li>
279 <li><a href="../MCollective/RPC/Stats.html">MCollective::RPC::Stats</a></li>
281 <li><a href="../MCollective/RPCAborted.html">MCollective::RPCAborted</a></li>
283 <li><a href="../MCollective/RPCError.html">MCollective::RPCError</a></li>
285 <li><a href="../MCollective/Registration.html">MCollective::Registration</a></li>
287 <li><a href="../MCollective/Registration/Base.html">MCollective::Registration::Base</a></li>
289 <li><a href="../MCollective/Runner.html">MCollective::Runner</a></li>
291 <li><a href="../MCollective/RunnerStats.html">MCollective::RunnerStats</a></li>
293 <li><a href="../MCollective/SSL.html">MCollective::SSL</a></li>
295 <li><a href="../MCollective/Security.html">MCollective::Security</a></li>
297 <li><a href="../MCollective/Security/Base.html">MCollective::Security::Base</a></li>
299 <li><a href="../MCollective/SecurityValidationFailed.html">MCollective::SecurityValidationFailed</a></li>
301 <li><a href="../MCollective/Shell.html">MCollective::Shell</a></li>
303 <li><a href="../MCollective/Translatable.html">MCollective::Translatable</a></li>
305 <li><a href="../MCollective/UnixDaemon.html">MCollective::UnixDaemon</a></li>
307 <li><a href="../MCollective/UnknownRPCAction.html">MCollective::UnknownRPCAction</a></li>
309 <li><a href="../MCollective/UnknownRPCError.html">MCollective::UnknownRPCError</a></li>
311 <li><a href="../MCollective/Util.html">MCollective::Util</a></li>
313 <li><a href="../MCollective/Validator.html">MCollective::Validator</a></li>
315 <li><a href="../MCollective/ValidatorError.html">MCollective::ValidatorError</a></li>
317 <li><a href="../MCollective/WindowsDaemon.html">MCollective::WindowsDaemon</a></li>
319 <li><a href="../Array.html">Array</a></li>
321 <li><a href="../Dir.html">Dir</a></li>
323 <li><a href="../Object.html">Object</a></li>
325 <li><a href="../String.html">String</a></li>
327 <li><a href="../Symbol.html">Symbol</a></li>
330 <div id="no-class-search-results" style="display: none;">No matching classes.</div>
337 <div id="documentation">
338 <h1 class="module">MCollective::PluginManager</h1>
340 <div id="description">
342 A simple plugin manager, it stores one plugin each of a specific type the
343 idea is that we can only have one security provider, one connector etc.
356 <div id="public-class-method-details" class="method-section section">
357 <h3 class="section-header">Public Class Methods</h3>
360 <div id="--method" class="method-detail ">
361 <a name="M000075"></a>
363 <div class="method-heading">
365 <span class="method-name"><<</span><span
366 class="method-args">(plugin)</span>
367 <span class="method-click-advice">click to toggle source</span>
371 <div class="method-description">
374 Adds a plugin to the list of plugins, we expect a hash like:
377 {:type => "base",
378 :class => foo.new}
384 {:type => "base",
385 :class => "Foo::Bar"}
388 In the event that we already have a class with the given type an exception
392 If the :class passed is a <a href="../String.html">String</a> then we will
393 delay instantiation till the first time someone asks for the plugin, this
394 is because most likely the registration gets done by inherited() hooks, at
395 which point the plugin class is not final.
398 If we were to do a .new here the Class initialize method would get called
399 and not the plugins, we there for only initialize the classes when they get
403 By default all plugin instances are cached and returned later so
404 there’s always a single instance. You can pass :single_instance =>
405 false when calling this to instruct it to always return a new instance when
406 a copy is requested. This only works with sending a <a
407 href="../String.html">String</a> for :class.
412 <div class="method-source-code"
415 <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 30</span>
416 30: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-operator"><<</span>(<span class="ruby-identifier">plugin</span>)
417 31: <span class="ruby-identifier">plugin</span>[<span class="ruby-identifier">:single_instance</span>] = <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">plugin</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:single_instance</span>)
419 33: <span class="ruby-identifier">type</span> = <span class="ruby-identifier">plugin</span>[<span class="ruby-identifier">:type</span>]
420 34: <span class="ruby-identifier">klass</span> = <span class="ruby-identifier">plugin</span>[<span class="ruby-identifier">:class</span>]
421 35: <span class="ruby-identifier">single</span> = <span class="ruby-identifier">plugin</span>[<span class="ruby-identifier">:single_instance</span>]
423 37: <span class="ruby-identifier">raise</span>(<span class="ruby-node">"Plugin #{type} already loaded"</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">type</span>)
426 40: <span class="ruby-comment cmt"># If we get a string then store 'nil' as the instance, signalling that we'll</span>
427 41: <span class="ruby-comment cmt"># create the class later on demand.</span>
428 42: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>)
429 43: <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">type</span>] = {<span class="ruby-identifier">:loadtime</span> =<span class="ruby-operator">></span> <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>, <span class="ruby-identifier">:class</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">klass</span>, <span class="ruby-identifier">:instance</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">:single</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">single</span>}
430 44: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">"Registering plugin #{type} with class #{klass} single_instance: #{single}"</span>)
431 45: <span class="ruby-keyword kw">else</span>
432 46: <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">type</span>] = {<span class="ruby-identifier">:loadtime</span> =<span class="ruby-operator">></span> <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>, <span class="ruby-identifier">:class</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">class</span>, <span class="ruby-identifier">:instance</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">klass</span>, <span class="ruby-identifier">:single</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">true</span>}
433 47: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">"Registering plugin #{type} with class #{klass.class} single_instance: true"</span>)
434 48: <span class="ruby-keyword kw">end</span>
435 49: <span class="ruby-keyword kw">end</span></pre>
444 <div id="--method" class="method-detail ">
445 <a name="M000080"></a>
447 <div class="method-heading">
449 <span class="method-name">[]</span><span
450 class="method-args">(plugin)</span>
451 <span class="method-click-advice">click to toggle source</span>
455 <div class="method-description">
458 Gets a plugin by type
463 <div class="method-source-code"
466 <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 72</span>
467 72: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-operator">[]</span>(<span class="ruby-identifier">plugin</span>)
468 73: <span class="ruby-identifier">raise</span>(<span class="ruby-node">"No plugin #{plugin} defined"</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">plugin</span>)
470 75: <span class="ruby-identifier">klass</span> = <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">plugin</span>][<span class="ruby-identifier">:class</span>]
472 77: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">plugin</span>][<span class="ruby-identifier">:single</span>]
473 78: <span class="ruby-comment cmt"># Create an instance of the class if one hasn't been done before</span>
474 79: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">plugin</span>][<span class="ruby-identifier">:instance</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>
475 80: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">"Returning new plugin #{plugin} with class #{klass}"</span>)
476 81: <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">plugin</span>][<span class="ruby-identifier">:instance</span>] = <span class="ruby-identifier">create_instance</span>(<span class="ruby-identifier">klass</span>)
477 82: <span class="ruby-keyword kw">else</span>
478 83: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">"Returning cached plugin #{plugin} with class #{klass}"</span>)
479 84: <span class="ruby-keyword kw">end</span>
481 86: <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">plugin</span>][<span class="ruby-identifier">:instance</span>]
482 87: <span class="ruby-keyword kw">else</span>
483 88: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">"Returning new plugin #{plugin} with class #{klass}"</span>)
484 89: <span class="ruby-identifier">create_instance</span>(<span class="ruby-identifier">klass</span>)
485 90: <span class="ruby-keyword kw">end</span>
486 91: <span class="ruby-keyword kw">end</span></pre>
495 <div id="clear-method" class="method-detail ">
496 <a name="M000079"></a>
498 <div class="method-heading">
500 <span class="method-name">clear</span><span
501 class="method-args">()</span>
502 <span class="method-click-advice">click to toggle source</span>
506 <div class="method-description">
509 deletes all registered plugins
514 <div class="method-source-code"
517 <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 67</span>
518 67: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">clear</span>
519 68: <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">clear</span>
520 69: <span class="ruby-keyword kw">end</span></pre>
529 <div id="create-instance-method" class="method-detail ">
530 <a name="M000081"></a>
532 <div class="method-heading">
534 <span class="method-name">create_instance</span><span
535 class="method-args">(klass)</span>
536 <span class="method-click-advice">click to toggle source</span>
540 <div class="method-description">
543 use eval to create an instance of a class
548 <div class="method-source-code"
549 id="create-instance-source">
551 <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 94</span>
552 94: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">create_instance</span>(<span class="ruby-identifier">klass</span>)
553 95: <span class="ruby-keyword kw">begin</span>
554 96: <span class="ruby-identifier">eval</span>(<span class="ruby-node">"#{klass}.new"</span>)
555 97: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">e</span>
556 98: <span class="ruby-identifier">raise</span>(<span class="ruby-node">"Could not create instance of plugin #{klass}: #{e}"</span>)
557 99: <span class="ruby-keyword kw">end</span>
558 100: <span class="ruby-keyword kw">end</span></pre>
567 <div id="delete-method" class="method-detail ">
568 <a name="M000076"></a>
570 <div class="method-heading">
572 <span class="method-name">delete</span><span
573 class="method-args">(plugin)</span>
574 <span class="method-click-advice">click to toggle source</span>
578 <div class="method-description">
581 Removes a plugim the list
586 <div class="method-source-code"
589 <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 52</span>
590 52: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">plugin</span>)
591 53: <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">plugin</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">plugin</span>)
592 54: <span class="ruby-keyword kw">end</span></pre>
601 <div id="find-method" class="method-detail ">
602 <a name="M000082"></a>
604 <div class="method-heading">
606 <span class="method-name">find</span><span
607 class="method-args">(type, extension="rb")</span>
608 <span class="method-click-advice">click to toggle source</span>
612 <div class="method-description">
615 Finds plugins in all configured libdirs
618 find("agent")
621 will return an array of just agent names, for example:
624 ["puppetd", "package"]
627 Can also be used to find files of other extensions:
630 find("agent", "ddl")
633 Will return the same list but only of files with extension .ddl in the
639 <div class="method-source-code"
642 <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 116</span>
643 116: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">extension</span>=<span class="ruby-value str">"rb"</span>)
644 117: <span class="ruby-identifier">extension</span> = <span class="ruby-node">".#{extension}"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">extension</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp re">/^\./</span>)
646 119: <span class="ruby-identifier">plugins</span> = []
648 121: <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">libdir</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">libdir</span><span class="ruby-operator">|</span>
649 122: <span class="ruby-identifier">plugdir</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>([<span class="ruby-identifier">libdir</span>, <span class="ruby-value str">"mcollective"</span>, <span class="ruby-identifier">type</span>.<span class="ruby-identifier">to_s</span>])
650 123: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">plugdir</span>)
652 125: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">plugdir</span>).<span class="ruby-identifier">grep</span>(<span class="ruby-node">/#{extension}$/</span>).<span class="ruby-identifier">map</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">plugin</span><span class="ruby-operator">|</span>
653 126: <span class="ruby-identifier">plugins</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">plugin</span>, <span class="ruby-identifier">extension</span>)
654 127: <span class="ruby-keyword kw">end</span>
655 128: <span class="ruby-keyword kw">end</span>
657 130: <span class="ruby-identifier">plugins</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">uniq</span>
658 131: <span class="ruby-keyword kw">end</span></pre>
667 <div id="find-and-load-method" class="method-detail ">
668 <a name="M000083"></a>
670 <div class="method-heading">
672 <span class="method-name">find_and_load</span><span
673 class="method-args">(type, extension="rb")</span>
674 <span class="method-click-advice">click to toggle source</span>
678 <div class="method-description">
681 Finds and loads from disk all plugins from all libdirs that match certain
685 find_and_load("pluginpackager")
688 Will find all .rb files in the libdir/mcollective/pluginpackager/ directory
689 in all libdirs and load them from disk.
692 You can influence what plugins get loaded using a block notation:
695 find_and_load("pluginpackager") do |plugin|
696 plugin.match(/puppet/)
700 This will load only plugins matching /puppet/
705 <div class="method-source-code"
706 id="find-and-load-source">
708 <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 148</span>
709 148: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">find_and_load</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">extension</span>=<span class="ruby-value str">"rb"</span>)
710 149: <span class="ruby-identifier">extension</span> = <span class="ruby-node">".#{extension}"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">extension</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp re">/^\./</span>)
712 151: <span class="ruby-identifier">klasses</span> = <span class="ruby-identifier">find</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">extension</span>).<span class="ruby-identifier">map</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">plugin</span><span class="ruby-operator">|</span>
713 152: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
714 153: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-keyword kw">yield</span>(<span class="ruby-identifier">plugin</span>)
715 154: <span class="ruby-keyword kw">end</span>
717 156: <span class="ruby-value str">"%s::%s::%s"</span> <span class="ruby-operator">%</span> [ <span class="ruby-value str">"MCollective"</span>, <span class="ruby-identifier">type</span>.<span class="ruby-identifier">capitalize</span>, <span class="ruby-identifier">plugin</span>.<span class="ruby-identifier">capitalize</span> ]
718 157: <span class="ruby-keyword kw">end</span>.<span class="ruby-identifier">compact</span>
720 159: <span class="ruby-identifier">klasses</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">uniq</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">klass</span><span class="ruby-operator">|</span> <span class="ruby-identifier">loadclass</span>(<span class="ruby-identifier">klass</span>, <span class="ruby-keyword kw">true</span>)}
721 160: <span class="ruby-keyword kw">end</span></pre>
730 <div id="grep-method" class="method-detail ">
731 <a name="M000085"></a>
733 <div class="method-heading">
735 <span class="method-name">grep</span><span
736 class="method-args">(regex)</span>
737 <span class="method-click-advice">click to toggle source</span>
741 <div class="method-description">
744 Grep’s over the plugin list and returns the list found
749 <div class="method-source-code"
752 <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 176</span>
753 176: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">grep</span>(<span class="ruby-identifier">regex</span>)
754 177: <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">grep</span>(<span class="ruby-identifier">regex</span>)
755 178: <span class="ruby-keyword kw">end</span></pre>
764 <div id="include--method" class="method-detail ">
765 <a name="M000077"></a>
767 <div class="method-heading">
769 <span class="method-name">include?</span><span
770 class="method-args">(plugin)</span>
771 <span class="method-click-advice">click to toggle source</span>
775 <div class="method-description">
778 Finds out if we have a plugin with the given name
783 <div class="method-source-code"
784 id="include--source">
786 <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 57</span>
787 57: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">plugin</span>)
788 58: <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">plugin</span>)
789 59: <span class="ruby-keyword kw">end</span></pre>
798 <div id="loadclass-method" class="method-detail ">
799 <a name="M000084"></a>
801 <div class="method-heading">
803 <span class="method-name">loadclass</span><span
804 class="method-args">(klass, squash_failures=false)</span>
805 <span class="method-click-advice">click to toggle source</span>
809 <div class="method-description">
812 Loads a class from file by doing some simple search/replace on class names
813 and then doing a require.
818 <div class="method-source-code"
819 id="loadclass-source">
821 <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 164</span>
822 164: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">loadclass</span>(<span class="ruby-identifier">klass</span>, <span class="ruby-identifier">squash_failures</span>=<span class="ruby-keyword kw">false</span>)
823 165: <span class="ruby-identifier">fname</span> = <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">"::"</span>, <span class="ruby-value str">"/"</span>).<span class="ruby-identifier">downcase</span> <span class="ruby-operator">+</span> <span class="ruby-value str">".rb"</span>
825 167: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">"Loading #{klass} from #{fname}"</span>)
827 169: <span class="ruby-identifier">load</span> <span class="ruby-identifier">fname</span>
828 170: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">e</span>
829 171: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">"Failed to load #{klass}: #{e}"</span>)
830 172: <span class="ruby-identifier">raise</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">squash_failures</span>
831 173: <span class="ruby-keyword kw">end</span></pre>
840 <div id="pluginlist-method" class="method-detail ">
841 <a name="M000078"></a>
843 <div class="method-heading">
845 <span class="method-name">pluginlist</span><span
846 class="method-args">()</span>
847 <span class="method-click-advice">click to toggle source</span>
851 <div class="method-description">
854 Provides a list of plugins we know about
859 <div class="method-source-code"
860 id="pluginlist-source">
862 <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 62</span>
863 62: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">pluginlist</span>
864 63: <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort</span>
865 64: <span class="ruby-keyword kw">end</span></pre>
880 <div id="rdoc-debugging-section-dump" class="debugging-section">
882 <p>Disabled; run with --debug to generate this.</p>
886 <div id="validator-badges">
887 <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
888 <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
889 Rdoc Generator</a> 1.1.6</small>.</p>