1 <?xml version="1.0" encoding="iso-8859-1"?>
3 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
8 <title>Class: MCollective::Application</title>
9 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10 <meta http-equiv="Content-Script-Type" content="text/javascript" />
11 <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12 <script type="text/javascript">
15 function popupCode( url ) {
16 window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
19 function toggleCode( id ) {
20 if ( document.getElementById )
21 elem = document.getElementById( id );
22 else if ( document.all )
23 elem = eval( "document.all." + id );
27 elemStyle = elem.style;
29 if ( elemStyle.display != "block" ) {
30 elemStyle.display = "block"
32 elemStyle.display = "none"
38 // Make codeblocks hidden by default
39 document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
49 <div id="classHeader">
50 <table class="header-table">
51 <tr class="top-aligned-row">
52 <td><strong>Class</strong></td>
53 <td class="class-name-in-header">MCollective::Application</td>
55 <tr class="top-aligned-row">
56 <td><strong>In:</strong></td>
58 <a href="../../files/lib/mcollective/application_rb.html">
59 lib/mcollective/application.rb
65 <tr class="top-aligned-row">
66 <td><strong>Parent:</strong></td>
73 <!-- banner header -->
75 <div id="bodyContent">
79 <div id="contextContent">
85 <div id="method-list">
86 <h3 class="section-bar">Methods</h3>
88 <div class="name-list">
89 <a href="#M000347">[]</a>
90 <a href="#M000346">[]=</a>
91 <a href="#M000362">application_cli_arguments</a>
92 <a href="#M000360">application_description</a>
93 <a href="#M000363">application_failure</a>
94 <a href="#M000345">application_options</a>
95 <a href="#M000359">application_options</a>
96 <a href="#M000357">application_parse_options</a>
97 <a href="#M000361">application_usage</a>
98 <a href="#M000356">clioptions</a>
99 <a href="#M000353">configuration</a>
100 <a href="#M000348">description</a>
101 <a href="#M000366">disconnect</a>
102 <a href="#M000350">exclude_argument_sections</a>
103 <a href="#M000369">halt</a>
104 <a href="#M000368">halt_code</a>
105 <a href="#M000364">help</a>
106 <a href="#M000352">intialize_application_options</a>
107 <a href="#M000367">main</a>
108 <a href="#M000351">option</a>
109 <a href="#M000354">options</a>
110 <a href="#M000370">rpcclient</a>
111 <a href="#M000365">run</a>
112 <a href="#M000349">usage</a>
113 <a href="#M000358">validate_cli_options</a>
114 <a href="#M000355">validate_option</a>
123 <h3 class="section-bar">Included Modules</h3>
125 <div id="includes-list">
126 <span class="include-name"><a href="RPC.html">RPC</a></span>
139 <!-- if method_list -->
141 <h3 class="section-bar">Public Class methods</h3>
143 <div id="method-M000347" class="method-detail">
144 <a name="M000347"></a>
146 <div class="method-heading">
147 <a href="#M000347" class="method-signature">
148 <span class="method-name">[]</span><span class="method-args">(option)</span>
152 <div class="method-description">
154 retrieves a specific <a href="Application.html#M000351">option</a>
156 <p><a class="source-toggle" href="#"
157 onclick="toggleCode('M000347-source');return false;">[Source]</a></p>
158 <div class="method-source-code" id="M000347-source">
160 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 20</span>
161 20: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]</span>(<span class="ruby-identifier">option</span>)
162 21: <span class="ruby-identifier">intialize_application_options</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@application_options</span>
163 22: <span class="ruby-ivar">@application_options</span>[<span class="ruby-identifier">option</span>]
164 23: <span class="ruby-keyword kw">end</span>
170 <div id="method-M000346" class="method-detail">
171 <a name="M000346"></a>
173 <div class="method-heading">
174 <a href="#M000346" class="method-signature">
175 <span class="method-name">[]=</span><span class="method-args">(option, value)</span>
179 <div class="method-description">
181 set an <a href="Application.html#M000351">option</a> in the <a
182 href="Application.html#M000354">options</a> hash
184 <p><a class="source-toggle" href="#"
185 onclick="toggleCode('M000346-source');return false;">[Source]</a></p>
186 <div class="method-source-code" id="M000346-source">
188 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 14</span>
189 14: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]=</span>(<span class="ruby-identifier">option</span>, <span class="ruby-identifier">value</span>)
190 15: <span class="ruby-identifier">intialize_application_options</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@application_options</span>
191 16: <span class="ruby-ivar">@application_options</span>[<span class="ruby-identifier">option</span>] = <span class="ruby-identifier">value</span>
192 17: <span class="ruby-keyword kw">end</span>
198 <div id="method-M000345" class="method-detail">
199 <a name="M000345"></a>
201 <div class="method-heading">
202 <a href="#M000345" class="method-signature">
203 <span class="method-name">application_options</span><span class="method-args">()</span>
207 <div class="method-description">
209 Intialize a blank set of <a href="Application.html#M000354">options</a> if
210 its the first time used else returns active <a
211 href="Application.html#M000354">options</a>
213 <p><a class="source-toggle" href="#"
214 onclick="toggleCode('M000345-source');return false;">[Source]</a></p>
215 <div class="method-source-code" id="M000345-source">
217 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 8</span>
218 8: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">application_options</span>
219 9: <span class="ruby-identifier">intialize_application_options</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@application_options</span>
220 10: <span class="ruby-ivar">@application_options</span>
221 11: <span class="ruby-keyword kw">end</span>
227 <div id="method-M000348" class="method-detail">
228 <a name="M000348"></a>
230 <div class="method-heading">
231 <a href="#M000348" class="method-signature">
232 <span class="method-name">description</span><span class="method-args">(descr)</span>
236 <div class="method-description">
238 Sets the application <a href="Application.html#M000348">description</a>,
239 there can be only one <a href="Application.html#M000348">description</a>
240 per application so multiple calls will just change the <a
241 href="Application.html#M000348">description</a>
243 <p><a class="source-toggle" href="#"
244 onclick="toggleCode('M000348-source');return false;">[Source]</a></p>
245 <div class="method-source-code" id="M000348-source">
247 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 28</span>
248 28: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">description</span>(<span class="ruby-identifier">descr</span>)
249 29: <span class="ruby-keyword kw">self</span>[<span class="ruby-identifier">:description</span>] = <span class="ruby-identifier">descr</span>
250 30: <span class="ruby-keyword kw">end</span>
256 <div id="method-M000350" class="method-detail">
257 <a name="M000350"></a>
259 <div class="method-heading">
260 <a href="#M000350" class="method-signature">
261 <span class="method-name">exclude_argument_sections</span><span class="method-args">(*sections)</span>
265 <div class="method-description">
266 <p><a class="source-toggle" href="#"
267 onclick="toggleCode('M000350-source');return false;">[Source]</a></p>
268 <div class="method-source-code" id="M000350-source">
270 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 38</span>
271 38: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">exclude_argument_sections</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">sections</span>)
272 39: <span class="ruby-identifier">sections</span> = [<span class="ruby-identifier">sections</span>].<span class="ruby-identifier">flatten</span>
274 41: <span class="ruby-identifier">sections</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
275 42: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Unknown CLI argument section #{s}"</span> <span class="ruby-keyword kw">unless</span> [<span class="ruby-value str">"rpc"</span>, <span class="ruby-value str">"common"</span>, <span class="ruby-value str">"filter"</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">s</span>)
276 43: <span class="ruby-keyword kw">end</span>
278 45: <span class="ruby-identifier">intialize_application_options</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@application_options</span>
279 46: <span class="ruby-keyword kw">self</span>[<span class="ruby-identifier">:exclude_arg_sections</span>] = <span class="ruby-identifier">sections</span>
280 47: <span class="ruby-keyword kw">end</span>
286 <div id="method-M000352" class="method-detail">
287 <a name="M000352"></a>
289 <div class="method-heading">
290 <a href="#M000352" class="method-signature">
291 <span class="method-name">intialize_application_options</span><span class="method-args">()</span>
295 <div class="method-description">
297 Creates an empty set of <a href="Application.html#M000354">options</a>
299 <p><a class="source-toggle" href="#"
300 onclick="toggleCode('M000352-source');return false;">[Source]</a></p>
301 <div class="method-source-code" id="M000352-source">
303 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 79</span>
304 79: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">intialize_application_options</span>
305 80: <span class="ruby-ivar">@application_options</span> = {<span class="ruby-identifier">:description</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">nil</span>,
306 81: <span class="ruby-identifier">:usage</span> =<span class="ruby-operator">></span> [],
307 82: <span class="ruby-identifier">:cli_arguments</span> =<span class="ruby-operator">></span> [],
308 83: <span class="ruby-identifier">:exclude_arg_sections</span> =<span class="ruby-operator">></span> []}
309 84: <span class="ruby-keyword kw">end</span>
315 <div id="method-M000351" class="method-detail">
316 <a name="M000351"></a>
318 <div class="method-heading">
319 <a href="#M000351" class="method-signature">
320 <span class="method-name">option</span><span class="method-args">(name, arguments)</span>
324 <div class="method-description">
326 Wrapper to create command line <a
327 href="Application.html#M000354">options</a>
330 - name: varaible name that will be used to access the option value
331 - description: textual info shown in --help
332 - arguments: a list of possible arguments that can be used
333 to activate this option
334 - type: a data type that ObjectParser understand of :bool or :array
335 - required: true or false if this option has to be supplied
336 - validate: a proc that will be called with the value used to validate
340 :description => "The foo option"
341 :arguments => ["--foo ARG"]
344 after this the value supplied will be in <a
345 href="Application.html#M000353">configuration</a>[:foo]
347 <p><a class="source-toggle" href="#"
348 onclick="toggleCode('M000351-source');return false;">[Source]</a></p>
349 <div class="method-source-code" id="M000351-source">
351 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 65</span>
352 65: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">option</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">arguments</span>)
353 66: <span class="ruby-identifier">opt</span> = {<span class="ruby-identifier">:name</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">name</span>,
354 67: <span class="ruby-identifier">:description</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">nil</span>,
355 68: <span class="ruby-identifier">:arguments</span> =<span class="ruby-operator">></span> [],
356 69: <span class="ruby-identifier">:type</span> =<span class="ruby-operator">></span> <span class="ruby-constant">String</span>,
357 70: <span class="ruby-identifier">:required</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">false</span>,
358 71: <span class="ruby-identifier">:validate</span> =<span class="ruby-operator">></span> <span class="ruby-constant">Proc</span>.<span class="ruby-identifier">new</span> { <span class="ruby-keyword kw">true</span> }}
360 73: <span class="ruby-identifier">arguments</span>.<span class="ruby-identifier">each_pair</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">opt</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">v</span>}
362 75: <span class="ruby-keyword kw">self</span>[<span class="ruby-identifier">:cli_arguments</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">opt</span>
363 76: <span class="ruby-keyword kw">end</span>
369 <div id="method-M000349" class="method-detail">
370 <a name="M000349"></a>
372 <div class="method-heading">
373 <a href="#M000349" class="method-signature">
374 <span class="method-name">usage</span><span class="method-args">(usage)</span>
378 <div class="method-description">
380 Supplies <a href="Application.html#M000349">usage</a> information, calling
381 multiple times will create multiple <a
382 href="Application.html#M000349">usage</a> lines in —<a
383 href="Application.html#M000364">help</a> output
385 <p><a class="source-toggle" href="#"
386 onclick="toggleCode('M000349-source');return false;">[Source]</a></p>
387 <div class="method-source-code" id="M000349-source">
389 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 34</span>
390 34: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">usage</span>(<span class="ruby-identifier">usage</span>)
391 35: <span class="ruby-keyword kw">self</span>[<span class="ruby-identifier">:usage</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">usage</span>
392 36: <span class="ruby-keyword kw">end</span>
398 <h3 class="section-bar">Public Instance methods</h3>
400 <div id="method-M000362" class="method-detail">
401 <a name="M000362"></a>
403 <div class="method-heading">
404 <a href="#M000362" class="method-signature">
405 <span class="method-name">application_cli_arguments</span><span class="method-args">()</span>
409 <div class="method-description">
411 Returns an array of all the arguments built using calls to optin
413 <p><a class="source-toggle" href="#"
414 onclick="toggleCode('M000362-source');return false;">[Source]</a></p>
415 <div class="method-source-code" id="M000362-source">
417 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 247</span>
418 247: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">application_cli_arguments</span>
419 248: <span class="ruby-identifier">application_options</span>[<span class="ruby-identifier">:cli_arguments</span>]
420 249: <span class="ruby-keyword kw">end</span>
426 <div id="method-M000360" class="method-detail">
427 <a name="M000360"></a>
429 <div class="method-heading">
430 <a href="#M000360" class="method-signature">
431 <span class="method-name">application_description</span><span class="method-args">()</span>
435 <div class="method-description">
437 Retrieve the current application <a
438 href="Application.html#M000348">description</a>
440 <p><a class="source-toggle" href="#"
441 onclick="toggleCode('M000360-source');return false;">[Source]</a></p>
442 <div class="method-source-code" id="M000360-source">
444 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 234</span>
445 234: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">application_description</span>
446 235: <span class="ruby-identifier">application_options</span>[<span class="ruby-identifier">:description</span>]
447 236: <span class="ruby-keyword kw">end</span>
453 <div id="method-M000363" class="method-detail">
454 <a name="M000363"></a>
456 <div class="method-heading">
457 <a href="#M000363" class="method-signature">
458 <span class="method-name">application_failure</span><span class="method-args">(e, err_dest=STDERR)</span>
462 <div class="method-description">
464 Handles failure, if we‘re far enough in the initialization phase it
465 will log backtraces if its in verbose mode only
467 <p><a class="source-toggle" href="#"
468 onclick="toggleCode('M000363-source');return false;">[Source]</a></p>
469 <div class="method-source-code" id="M000363-source">
471 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 253</span>
472 253: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">application_failure</span>(<span class="ruby-identifier">e</span>, <span class="ruby-identifier">err_dest</span>=<span class="ruby-constant">STDERR</span>)
473 254: <span class="ruby-comment cmt"># peole can use exit() anywhere and not get nasty backtraces as a result</span>
474 255: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">SystemExit</span>)
475 256: <span class="ruby-identifier">disconnect</span>
476 257: <span class="ruby-identifier">raise</span>(<span class="ruby-identifier">e</span>)
477 258: <span class="ruby-keyword kw">end</span>
479 260: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">CodedError</span>)
480 261: <span class="ruby-identifier">err_dest</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">"\nThe %s application failed to run: %s: %s\n"</span> <span class="ruby-operator">%</span> [ <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:bold</span>, <span class="ruby-identifier">$0</span>), <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:bold</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">code</span>), <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:red</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">to_s</span>)]
482 263: <span class="ruby-identifier">err_dest</span>.<span class="ruby-identifier">puts</span>
483 264: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:verbose</span>]
484 265: <span class="ruby-identifier">err_dest</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">"Use the 'mco doc %s' command for details about this error"</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">code</span>
485 266: <span class="ruby-keyword kw">else</span>
486 267: <span class="ruby-identifier">err_dest</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">"Use the 'mco doc %s' command for details about this error, use -v for full error backtrace details"</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">code</span>
487 268: <span class="ruby-keyword kw">end</span>
488 269: <span class="ruby-keyword kw">else</span>
489 270: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:verbose</span>]
490 271: <span class="ruby-identifier">err_dest</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">"\nThe %s application failed to run: %s\n"</span> <span class="ruby-operator">%</span> [ <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:bold</span>, <span class="ruby-identifier">$0</span>), <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:red</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">to_s</span>)]
491 272: <span class="ruby-keyword kw">else</span>
492 273: <span class="ruby-identifier">err_dest</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">"\nThe %s application failed to run, use -v for full error backtrace details: %s\n"</span> <span class="ruby-operator">%</span> [ <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:bold</span>, <span class="ruby-identifier">$0</span>), <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:red</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">to_s</span>)]
493 274: <span class="ruby-keyword kw">end</span>
494 275: <span class="ruby-keyword kw">end</span>
496 277: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:verbose</span>]
497 278: <span class="ruby-identifier">e</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">first</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:red</span>, <span class="ruby-value str">" <----"</span>)
498 279: <span class="ruby-identifier">err_dest</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">"\n%s %s"</span> <span class="ruby-operator">%</span> [ <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:red</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">to_s</span>), <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:bold</span>, <span class="ruby-node">"(#{e.class.to_s})"</span>)]
499 280: <span class="ruby-identifier">e</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">each</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">err_dest</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">"\tfrom #{l}"</span>}
500 281: <span class="ruby-keyword kw">end</span>
502 283: <span class="ruby-identifier">disconnect</span>
504 285: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
505 286: <span class="ruby-keyword kw">end</span>
511 <div id="method-M000359" class="method-detail">
512 <a name="M000359"></a>
514 <div class="method-heading">
515 <a href="#M000359" class="method-signature">
516 <span class="method-name">application_options</span><span class="method-args">()</span>
520 <div class="method-description">
522 Retrieves the full hash of application <a
523 href="Application.html#M000354">options</a>
525 <p><a class="source-toggle" href="#"
526 onclick="toggleCode('M000359-source');return false;">[Source]</a></p>
527 <div class="method-source-code" id="M000359-source">
529 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 229</span>
530 229: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">application_options</span>
531 230: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">application_options</span>
532 231: <span class="ruby-keyword kw">end</span>
538 <div id="method-M000357" class="method-detail">
539 <a name="M000357"></a>
541 <div class="method-heading">
542 <a href="#M000357" class="method-signature">
543 <span class="method-name">application_parse_options</span><span class="method-args">(help=false)</span>
547 <div class="method-description">
549 Builds an ObjectParser config, parse the CLI <a
550 href="Application.html#M000354">options</a> and validates based on the <a
551 href="Application.html#M000351">option</a> config
553 <p><a class="source-toggle" href="#"
554 onclick="toggleCode('M000357-source');return false;">[Source]</a></p>
555 <div class="method-source-code" id="M000357-source">
557 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 135</span>
558 135: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">application_parse_options</span>(<span class="ruby-identifier">help</span>=<span class="ruby-keyword kw">false</span>)
559 136: <span class="ruby-ivar">@options</span> <span class="ruby-operator">||=</span> {<span class="ruby-identifier">:verbose</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">false</span>}
561 138: <span class="ruby-ivar">@options</span> = <span class="ruby-identifier">clioptions</span>(<span class="ruby-identifier">help</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">parser</span>, <span class="ruby-identifier">options</span><span class="ruby-operator">|</span>
562 139: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">define_head</span> <span class="ruby-identifier">application_description</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">application_description</span>
563 140: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">banner</span> = <span class="ruby-value str">""</span>
565 142: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">application_usage</span>
566 143: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">""</span>
568 145: <span class="ruby-identifier">application_usage</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">u</span><span class="ruby-operator">|</span>
569 146: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-node">"Usage: #{u}"</span>
570 147: <span class="ruby-keyword kw">end</span>
572 149: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">""</span>
573 150: <span class="ruby-keyword kw">end</span>
575 152: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">"Application Options"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">application_cli_arguments</span>.<span class="ruby-identifier">empty?</span>
577 154: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">define_tail</span> <span class="ruby-value str">""</span>
578 155: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">define_tail</span> <span class="ruby-node">"The Marionette Collective #{MCollective.version}"</span>
581 158: <span class="ruby-identifier">application_cli_arguments</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">carg</span><span class="ruby-operator">|</span>
582 159: <span class="ruby-identifier">opts_array</span> = []
584 161: <span class="ruby-identifier">opts_array</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">:on</span>
586 163: <span class="ruby-comment cmt"># if a default is set from the application set it up front</span>
587 164: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">carg</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:default</span>)
588 165: <span class="ruby-identifier">configuration</span>[<span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:name</span>]] = <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:default</span>]
589 166: <span class="ruby-keyword kw">end</span>
591 168: <span class="ruby-comment cmt"># :arguments are multiple possible ones</span>
592 169: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:arguments</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
593 170: <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:arguments</span>].<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-identifier">opts_array</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">a</span>}
594 171: <span class="ruby-keyword kw">else</span>
595 172: <span class="ruby-identifier">opts_array</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:arguments</span>]
596 173: <span class="ruby-keyword kw">end</span>
598 175: <span class="ruby-comment cmt"># type was given and its not one of our special types, just pass it onto optparse</span>
599 176: <span class="ruby-identifier">opts_array</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:type</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:type</span>] <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span>[<span class="ruby-identifier">:boolean</span>, <span class="ruby-identifier">:bool</span>, <span class="ruby-identifier">:array</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:type</span>])
601 178: <span class="ruby-identifier">opts_array</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:description</span>]
603 180: <span class="ruby-comment cmt"># Handle our special types else just rely on the optparser to handle the types</span>
604 181: <span class="ruby-keyword kw">if</span> [<span class="ruby-identifier">:bool</span>, <span class="ruby-identifier">:boolean</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:type</span>])
605 182: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">send</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">opts_array</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
606 183: <span class="ruby-identifier">validate_option</span>(<span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:validate</span>], <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:name</span>], <span class="ruby-identifier">v</span>)
608 185: <span class="ruby-identifier">configuration</span>[<span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:name</span>]] = <span class="ruby-identifier">v</span>
609 186: <span class="ruby-keyword kw">end</span>
611 188: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:type</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">:array</span>
612 189: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">send</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">opts_array</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
613 190: <span class="ruby-identifier">validate_option</span>(<span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:validate</span>], <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:name</span>], <span class="ruby-identifier">v</span>)
615 192: <span class="ruby-identifier">configuration</span>[<span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:name</span>]] = [] <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">configuration</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:name</span>])
616 193: <span class="ruby-identifier">configuration</span>[<span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:name</span>]] <span class="ruby-operator"><<</span> <span class="ruby-identifier">v</span>
617 194: <span class="ruby-keyword kw">end</span>
619 196: <span class="ruby-keyword kw">else</span>
620 197: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">send</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">opts_array</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
621 198: <span class="ruby-identifier">validate_option</span>(<span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:validate</span>], <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:name</span>], <span class="ruby-identifier">v</span>)
623 200: <span class="ruby-identifier">configuration</span>[<span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:name</span>]] = <span class="ruby-identifier">v</span>
624 201: <span class="ruby-keyword kw">end</span>
625 202: <span class="ruby-keyword kw">end</span>
626 203: <span class="ruby-keyword kw">end</span>
627 204: <span class="ruby-keyword kw">end</span>
628 205: <span class="ruby-keyword kw">end</span>
634 <div id="method-M000361" class="method-detail">
635 <a name="M000361"></a>
637 <div class="method-heading">
638 <a href="#M000361" class="method-signature">
639 <span class="method-name">application_usage</span><span class="method-args">()</span>
643 <div class="method-description">
645 Return the current <a href="Application.html#M000349">usage</a> text false
648 <p><a class="source-toggle" href="#"
649 onclick="toggleCode('M000361-source');return false;">[Source]</a></p>
650 <div class="method-source-code" id="M000361-source">
652 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 239</span>
653 239: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">application_usage</span>
654 240: <span class="ruby-identifier">usage</span> = <span class="ruby-identifier">application_options</span>[<span class="ruby-identifier">:usage</span>]
656 242: <span class="ruby-identifier">usage</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-value">? </span><span class="ruby-keyword kw">false</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">usage</span>
657 243: <span class="ruby-keyword kw">end</span>
663 <div id="method-M000356" class="method-detail">
664 <a name="M000356"></a>
666 <div class="method-heading">
667 <a href="#M000356" class="method-signature">
668 <span class="method-name">clioptions</span><span class="method-args">(help) {|parser, options| ...}</span>
672 <div class="method-description">
674 Creates a standard <a href="Application.html#M000354">options</a> hash,
675 pass in a block to add extra headings etc see <a
676 href="Optionparser.html">Optionparser</a>
678 <p><a class="source-toggle" href="#"
679 onclick="toggleCode('M000356-source');return false;">[Source]</a></p>
680 <div class="method-source-code" id="M000356-source">
682 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 111</span>
683 111: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">clioptions</span>(<span class="ruby-identifier">help</span>)
684 112: <span class="ruby-identifier">oparser</span> = <span class="ruby-constant">Optionparser</span>.<span class="ruby-identifier">new</span>({<span class="ruby-identifier">:verbose</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">:progress_bar</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">true</span>}, <span class="ruby-value str">"filter"</span>, <span class="ruby-identifier">application_options</span>[<span class="ruby-identifier">:exclude_arg_sections</span>])
686 114: <span class="ruby-identifier">options</span> = <span class="ruby-identifier">oparser</span>.<span class="ruby-identifier">parse</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">parser</span>, <span class="ruby-identifier">options</span><span class="ruby-operator">|</span>
687 115: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
688 116: <span class="ruby-keyword kw">yield</span>(<span class="ruby-identifier">parser</span>, <span class="ruby-identifier">options</span>)
689 117: <span class="ruby-keyword kw">end</span>
691 119: <span class="ruby-constant">RPC</span><span class="ruby-operator">::</span><span class="ruby-constant">Helpers</span>.<span class="ruby-identifier">add_simplerpc_options</span>(<span class="ruby-identifier">parser</span>, <span class="ruby-identifier">options</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">application_options</span>[<span class="ruby-identifier">:exclude_arg_sections</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-value str">"rpc"</span>)
692 120: <span class="ruby-keyword kw">end</span>
694 122: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">oparser</span>.<span class="ruby-identifier">parser</span>.<span class="ruby-identifier">help</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">help</span>
696 124: <span class="ruby-identifier">validate_cli_options</span>
698 126: <span class="ruby-identifier">post_option_parser</span>(<span class="ruby-identifier">configuration</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">:post_option_parser</span>)
700 128: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">options</span>
701 129: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">e</span>
702 130: <span class="ruby-identifier">application_failure</span>(<span class="ruby-identifier">e</span>)
703 131: <span class="ruby-keyword kw">end</span>
709 <div id="method-M000353" class="method-detail">
710 <a name="M000353"></a>
712 <div class="method-heading">
713 <a href="#M000353" class="method-signature">
714 <span class="method-name">configuration</span><span class="method-args">()</span>
718 <div class="method-description">
720 The application <a href="Application.html#M000353">configuration</a> built
723 <p><a class="source-toggle" href="#"
724 onclick="toggleCode('M000353-source');return false;">[Source]</a></p>
725 <div class="method-source-code" id="M000353-source">
727 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 88</span>
728 88: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">configuration</span>
729 89: <span class="ruby-ivar">@application_configuration</span> <span class="ruby-operator">||=</span> {}
730 90: <span class="ruby-ivar">@application_configuration</span>
731 91: <span class="ruby-keyword kw">end</span>
737 <div id="method-M000366" class="method-detail">
738 <a name="M000366"></a>
740 <div class="method-heading">
741 <a href="#M000366" class="method-signature">
742 <span class="method-name">disconnect</span><span class="method-args">()</span>
746 <div class="method-description">
747 <p><a class="source-toggle" href="#"
748 onclick="toggleCode('M000366-source');return false;">[Source]</a></p>
749 <div class="method-source-code" id="M000366-source">
751 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 310</span>
752 310: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">disconnect</span>
753 311: <span class="ruby-constant">MCollective</span><span class="ruby-operator">::</span><span class="ruby-constant">PluginManager</span>[<span class="ruby-value str">"connector_plugin"</span>].<span class="ruby-identifier">disconnect</span>
754 312: <span class="ruby-keyword kw">rescue</span>
755 313: <span class="ruby-keyword kw">end</span>
761 <div id="method-M000369" class="method-detail">
762 <a name="M000369"></a>
764 <div class="method-heading">
765 <a href="#M000369" class="method-signature">
766 <span class="method-name">halt</span><span class="method-args">(stats)</span>
770 <div class="method-description">
772 A helper that creates a consistent exit code for applications by looking at
773 an instance of <a href="RPC/Stats.html">MCollective::RPC::Stats</a>
776 Exit with 0 if nodes were discovered and all passed Exit with 0 if no
777 discovery were done and > 0 responses were received, all ok Exit with 1
778 if no nodes were discovered Exit with 2 if nodes were discovered but some
779 <a href="RPC.html">RPC</a> requests failed Exit with 3 if nodes were
780 discovered, but no responses received Exit with 4 if no discovery were done
781 and no responses were received
783 <p><a class="source-toggle" href="#"
784 onclick="toggleCode('M000369-source');return false;">[Source]</a></p>
785 <div class="method-source-code" id="M000369-source">
787 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 345</span>
788 345: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">halt</span>(<span class="ruby-identifier">stats</span>)
789 346: <span class="ruby-identifier">exit</span>(<span class="ruby-identifier">halt_code</span>(<span class="ruby-identifier">stats</span>))
790 347: <span class="ruby-keyword kw">end</span>
796 <div id="method-M000368" class="method-detail">
797 <a name="M000368"></a>
799 <div class="method-heading">
800 <a href="#M000368" class="method-signature">
801 <span class="method-name">halt_code</span><span class="method-args">(stats)</span>
805 <div class="method-description">
806 <p><a class="source-toggle" href="#"
807 onclick="toggleCode('M000368-source');return false;">[Source]</a></p>
808 <div class="method-source-code" id="M000368-source">
810 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 322</span>
811 322: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">halt_code</span>(<span class="ruby-identifier">stats</span>)
812 323: <span class="ruby-identifier">request_stats</span> = {<span class="ruby-identifier">:discoverytime</span> =<span class="ruby-operator">></span> <span class="ruby-value">0</span>,
813 324: <span class="ruby-identifier">:discovered</span> =<span class="ruby-operator">></span> <span class="ruby-value">0</span>,
814 325: <span class="ruby-identifier">:okcount</span> =<span class="ruby-operator">></span> <span class="ruby-value">0</span>,
815 326: <span class="ruby-identifier">:failcount</span> =<span class="ruby-operator">></span> <span class="ruby-value">0</span>}.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">stats</span>.<span class="ruby-identifier">to_hash</span>)
817 328: <span class="ruby-keyword kw">return</span> <span class="ruby-value">4</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">request_stats</span>[<span class="ruby-identifier">:discoverytime</span>] <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">request_stats</span>[<span class="ruby-identifier">:responses</span>] <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
818 329: <span class="ruby-keyword kw">return</span> <span class="ruby-value">3</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">request_stats</span>[<span class="ruby-identifier">:discovered</span>] <span class="ruby-operator">></span> <span class="ruby-value">0</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">request_stats</span>[<span class="ruby-identifier">:responses</span>] <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
819 330: <span class="ruby-keyword kw">return</span> <span class="ruby-value">2</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">request_stats</span>[<span class="ruby-identifier">:discovered</span>] <span class="ruby-operator">></span> <span class="ruby-value">0</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">request_stats</span>[<span class="ruby-identifier">:failcount</span>] <span class="ruby-operator">></span> <span class="ruby-value">0</span>
820 331: <span class="ruby-keyword kw">return</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">request_stats</span>[<span class="ruby-identifier">:discovered</span>] <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
821 332: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">request_stats</span>[<span class="ruby-identifier">:discoverytime</span>] <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">request_stats</span>[<span class="ruby-identifier">:discovered</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">request_stats</span>[<span class="ruby-identifier">:okcount</span>]
822 333: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">request_stats</span>[<span class="ruby-identifier">:discovered</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">request_stats</span>[<span class="ruby-identifier">:okcount</span>]
823 334: <span class="ruby-keyword kw">end</span>
829 <div id="method-M000364" class="method-detail">
830 <a name="M000364"></a>
832 <div class="method-heading">
833 <a href="#M000364" class="method-signature">
834 <span class="method-name">help</span><span class="method-args">()</span>
838 <div class="method-description">
839 <p><a class="source-toggle" href="#"
840 onclick="toggleCode('M000364-source');return false;">[Source]</a></p>
841 <div class="method-source-code" id="M000364-source">
843 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 288</span>
844 288: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">help</span>
845 289: <span class="ruby-identifier">application_parse_options</span>(<span class="ruby-keyword kw">true</span>)
846 290: <span class="ruby-keyword kw">end</span>
852 <div id="method-M000367" class="method-detail">
853 <a name="M000367"></a>
855 <div class="method-heading">
856 <a href="#M000367" class="method-signature">
857 <span class="method-name">main</span><span class="method-args">()</span>
861 <div class="method-description">
863 Fake abstract class that logs if the user tries to use an application
864 without supplying a <a href="Application.html#M000367">main</a> override
867 <p><a class="source-toggle" href="#"
868 onclick="toggleCode('M000367-source');return false;">[Source]</a></p>
869 <div class="method-source-code" id="M000367-source">
871 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 317</span>
872 317: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">main</span>
873 318: <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">"Applications need to supply a 'main' method"</span>
874 319: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
875 320: <span class="ruby-keyword kw">end</span>
881 <div id="method-M000354" class="method-detail">
882 <a name="M000354"></a>
884 <div class="method-heading">
885 <a href="#M000354" class="method-signature">
886 <span class="method-name">options</span><span class="method-args">()</span>
890 <div class="method-description">
892 The active <a href="Application.html#M000354">options</a> hash used for
893 MC::Client and other <a href="Application.html#M000353">configuration</a>
895 <p><a class="source-toggle" href="#"
896 onclick="toggleCode('M000354-source');return false;">[Source]</a></p>
897 <div class="method-source-code" id="M000354-source">
899 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 94</span>
900 94: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">options</span>
901 95: <span class="ruby-ivar">@options</span>
902 96: <span class="ruby-keyword kw">end</span>
908 <div id="method-M000370" class="method-detail">
909 <a name="M000370"></a>
911 <div class="method-heading">
912 <a href="#M000370" class="method-signature">
913 <span class="method-name">rpcclient</span><span class="method-args">(agent, flags = {})</span>
917 <div class="method-description">
919 Wrapper around <a href="RPC.html#M000037">MC::RPC#rpcclient</a> that
920 forcably supplies our <a href="Application.html#M000354">options</a> hash
921 if someone forgets to pass in <a
922 href="Application.html#M000354">options</a> in an application the filters
923 and other cli <a href="Application.html#M000354">options</a> wouldnt take
924 effect which could have a disasterous outcome
926 <p><a class="source-toggle" href="#"
927 onclick="toggleCode('M000370-source');return false;">[Source]</a></p>
928 <div class="method-source-code" id="M000370-source">
930 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 352</span>
931 352: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rpcclient</span>(<span class="ruby-identifier">agent</span>, <span class="ruby-identifier">flags</span> = {})
932 353: <span class="ruby-identifier">flags</span>[<span class="ruby-identifier">:options</span>] = <span class="ruby-identifier">options</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">flags</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:options</span>)
933 354: <span class="ruby-identifier">flags</span>[<span class="ruby-identifier">:exit_on_failure</span>] = <span class="ruby-keyword kw">false</span>
935 356: <span class="ruby-keyword kw">super</span>
936 357: <span class="ruby-keyword kw">end</span>
942 <div id="method-M000365" class="method-detail">
943 <a name="M000365"></a>
945 <div class="method-heading">
946 <a href="#M000365" class="method-signature">
947 <span class="method-name">run</span><span class="method-args">()</span>
951 <div class="method-description">
953 The <a href="Application.html#M000367">main</a> logic loop, builds up the
954 <a href="Application.html#M000354">options</a>, validate <a
955 href="Application.html#M000353">configuration</a> and calls the <a
956 href="Application.html#M000367">main</a> as supplied by the user.
957 Disconnects when done and pass any exception onto the <a
958 href="Application.html#M000363">application_failure</a> helper
960 <p><a class="source-toggle" href="#"
961 onclick="toggleCode('M000365-source');return false;">[Source]</a></p>
962 <div class="method-source-code" id="M000365-source">
964 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 295</span>
965 295: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">run</span>
966 296: <span class="ruby-identifier">application_parse_options</span>
968 298: <span class="ruby-identifier">validate_configuration</span>(<span class="ruby-identifier">configuration</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">:validate_configuration</span>)
970 300: <span class="ruby-constant">Util</span>.<span class="ruby-identifier">setup_windows_sleeper</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Util</span>.<span class="ruby-identifier">windows?</span>
972 302: <span class="ruby-identifier">main</span>
974 304: <span class="ruby-identifier">disconnect</span>
976 306: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">e</span>
977 307: <span class="ruby-identifier">application_failure</span>(<span class="ruby-identifier">e</span>)
978 308: <span class="ruby-keyword kw">end</span>
984 <div id="method-M000358" class="method-detail">
985 <a name="M000358"></a>
987 <div class="method-heading">
988 <a href="#M000358" class="method-signature">
989 <span class="method-name">validate_cli_options</span><span class="method-args">()</span>
993 <div class="method-description">
994 <p><a class="source-toggle" href="#"
995 onclick="toggleCode('M000358-source');return false;">[Source]</a></p>
996 <div class="method-source-code" id="M000358-source">
998 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 207</span>
999 207: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">validate_cli_options</span>
1000 208: <span class="ruby-comment cmt"># Check all required parameters were set</span>
1001 209: <span class="ruby-identifier">validation_passed</span> = <span class="ruby-keyword kw">true</span>
1002 210: <span class="ruby-identifier">application_cli_arguments</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">carg</span><span class="ruby-operator">|</span>
1003 211: <span class="ruby-comment cmt"># Check for required arguments</span>
1004 212: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:required</span>]
1005 213: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">configuration</span>[ <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:name</span>] ]
1006 214: <span class="ruby-identifier">validation_passed</span> = <span class="ruby-keyword kw">false</span>
1007 215: <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">"The #{carg[:name]} option is mandatory"</span>
1008 216: <span class="ruby-keyword kw">end</span>
1009 217: <span class="ruby-keyword kw">end</span>
1010 218: <span class="ruby-keyword kw">end</span>
1012 220: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">validation_passed</span>
1013 221: <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">"\nPlease run with --help for detailed help"</span>
1014 222: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
1015 223: <span class="ruby-keyword kw">end</span>
1018 226: <span class="ruby-keyword kw">end</span>
1024 <div id="method-M000355" class="method-detail">
1025 <a name="M000355"></a>
1027 <div class="method-heading">
1028 <a href="#M000355" class="method-signature">
1029 <span class="method-name">validate_option</span><span class="method-args">(blk, name, value)</span>
1033 <div class="method-description">
1035 Calls the supplied block in an <a
1036 href="Application.html#M000351">option</a> for validation, an error raised
1037 will log to STDERR and exit the application
1039 <p><a class="source-toggle" href="#"
1040 onclick="toggleCode('M000355-source');return false;">[Source]</a></p>
1041 <div class="method-source-code" id="M000355-source">
1043 <span class="ruby-comment cmt"># File lib/mcollective/application.rb, line 100</span>
1044 100: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">validate_option</span>(<span class="ruby-identifier">blk</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>)
1045 101: <span class="ruby-identifier">validation_result</span> = <span class="ruby-identifier">blk</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">value</span>)
1047 103: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">validation_result</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">true</span>
1048 104: <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">"Validation of #{name} failed: #{validation_result}"</span>
1049 105: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
1050 106: <span class="ruby-keyword kw">end</span>
1051 107: <span class="ruby-keyword kw">end</span>
1064 <div id="validator-badges">
1065 <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>