Update version according to OSCI-856
[packages/precise/mcollective.git] / doc / classes / MCollective / Application.html
1 <?xml version="1.0" encoding="iso-8859-1"?>
2 <!DOCTYPE html 
3      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
6 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7 <head>
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">
13   // <![CDATA[
14
15   function popupCode( url ) {
16     window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17   }
18
19   function toggleCode( id ) {
20     if ( document.getElementById )
21       elem = document.getElementById( id );
22     else if ( document.all )
23       elem = eval( "document.all." + id );
24     else
25       return false;
26
27     elemStyle = elem.style;
28     
29     if ( elemStyle.display != "block" ) {
30       elemStyle.display = "block"
31     } else {
32       elemStyle.display = "none"
33     }
34
35     return true;
36   }
37   
38   // Make codeblocks hidden by default
39   document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40   
41   // ]]>
42   </script>
43
44 </head>
45 <body>
46
47
48
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>
54         </tr>
55         <tr class="top-aligned-row">
56             <td><strong>In:</strong></td>
57             <td>
58                 <a href="../../files/lib/mcollective/application_rb.html">
59                 lib/mcollective/application.rb
60                 </a>
61         <br />
62             </td>
63         </tr>
64
65         <tr class="top-aligned-row">
66             <td><strong>Parent:</strong></td>
67             <td>
68                 Object
69             </td>
70         </tr>
71         </table>
72     </div>
73   <!-- banner header -->
74
75   <div id="bodyContent">
76
77
78
79   <div id="contextContent">
80
81
82
83    </div>
84
85     <div id="method-list">
86       <h3 class="section-bar">Methods</h3>
87
88       <div class="name-list">
89       <a href="#M000347">[]</a>&nbsp;&nbsp;
90       <a href="#M000346">[]=</a>&nbsp;&nbsp;
91       <a href="#M000362">application_cli_arguments</a>&nbsp;&nbsp;
92       <a href="#M000360">application_description</a>&nbsp;&nbsp;
93       <a href="#M000363">application_failure</a>&nbsp;&nbsp;
94       <a href="#M000345">application_options</a>&nbsp;&nbsp;
95       <a href="#M000359">application_options</a>&nbsp;&nbsp;
96       <a href="#M000357">application_parse_options</a>&nbsp;&nbsp;
97       <a href="#M000361">application_usage</a>&nbsp;&nbsp;
98       <a href="#M000356">clioptions</a>&nbsp;&nbsp;
99       <a href="#M000353">configuration</a>&nbsp;&nbsp;
100       <a href="#M000348">description</a>&nbsp;&nbsp;
101       <a href="#M000366">disconnect</a>&nbsp;&nbsp;
102       <a href="#M000350">exclude_argument_sections</a>&nbsp;&nbsp;
103       <a href="#M000369">halt</a>&nbsp;&nbsp;
104       <a href="#M000368">halt_code</a>&nbsp;&nbsp;
105       <a href="#M000364">help</a>&nbsp;&nbsp;
106       <a href="#M000352">intialize_application_options</a>&nbsp;&nbsp;
107       <a href="#M000367">main</a>&nbsp;&nbsp;
108       <a href="#M000351">option</a>&nbsp;&nbsp;
109       <a href="#M000354">options</a>&nbsp;&nbsp;
110       <a href="#M000370">rpcclient</a>&nbsp;&nbsp;
111       <a href="#M000365">run</a>&nbsp;&nbsp;
112       <a href="#M000349">usage</a>&nbsp;&nbsp;
113       <a href="#M000358">validate_cli_options</a>&nbsp;&nbsp;
114       <a href="#M000355">validate_option</a>&nbsp;&nbsp;
115       </div>
116     </div>
117
118   </div>
119
120
121     <!-- if includes -->
122     <div id="includes">
123       <h3 class="section-bar">Included Modules</h3>
124
125       <div id="includes-list">
126         <span class="include-name"><a href="RPC.html">RPC</a></span>
127       </div>
128     </div>
129
130     <div id="section">
131
132
133
134
135
136       
137
138
139     <!-- if method_list -->
140     <div id="methods">
141       <h3 class="section-bar">Public Class methods</h3>
142
143       <div id="method-M000347" class="method-detail">
144         <a name="M000347"></a>
145
146         <div class="method-heading">
147           <a href="#M000347" class="method-signature">
148           <span class="method-name">[]</span><span class="method-args">(option)</span>
149           </a>
150         </div>
151       
152         <div class="method-description">
153           <p>
154 retrieves a specific <a href="Application.html#M000351">option</a>
155 </p>
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">
159 <pre>
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>
165 </pre>
166           </div>
167         </div>
168       </div>
169
170       <div id="method-M000346" class="method-detail">
171         <a name="M000346"></a>
172
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>
176           </a>
177         </div>
178       
179         <div class="method-description">
180           <p>
181 set an <a href="Application.html#M000351">option</a> in the <a
182 href="Application.html#M000354">options</a> hash
183 </p>
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">
187 <pre>
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>
193 </pre>
194           </div>
195         </div>
196       </div>
197
198       <div id="method-M000345" class="method-detail">
199         <a name="M000345"></a>
200
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>
204           </a>
205         </div>
206       
207         <div class="method-description">
208           <p>
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>
212 </p>
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">
216 <pre>
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>
222 </pre>
223           </div>
224         </div>
225       </div>
226
227       <div id="method-M000348" class="method-detail">
228         <a name="M000348"></a>
229
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>
233           </a>
234         </div>
235       
236         <div class="method-description">
237           <p>
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>
242 </p>
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">
246 <pre>
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>
251 </pre>
252           </div>
253         </div>
254       </div>
255
256       <div id="method-M000350" class="method-detail">
257         <a name="M000350"></a>
258
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>
262           </a>
263         </div>
264       
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">
269 <pre>
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>
273 40: 
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">&quot;Unknown CLI argument section #{s}&quot;</span> <span class="ruby-keyword kw">unless</span> [<span class="ruby-value str">&quot;rpc&quot;</span>, <span class="ruby-value str">&quot;common&quot;</span>, <span class="ruby-value str">&quot;filter&quot;</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">s</span>)
276 43:         <span class="ruby-keyword kw">end</span>
277 44: 
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>
281 </pre>
282           </div>
283         </div>
284       </div>
285
286       <div id="method-M000352" class="method-detail">
287         <a name="M000352"></a>
288
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>
292           </a>
293         </div>
294       
295         <div class="method-description">
296           <p>
297 Creates an empty set of <a href="Application.html#M000354">options</a>
298 </p>
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">
302 <pre>
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">&gt;</span> <span class="ruby-keyword kw">nil</span>,
306 81:                                 <span class="ruby-identifier">:usage</span>                =<span class="ruby-operator">&gt;</span> [],
307 82:                                 <span class="ruby-identifier">:cli_arguments</span>        =<span class="ruby-operator">&gt;</span> [],
308 83:                                 <span class="ruby-identifier">:exclude_arg_sections</span> =<span class="ruby-operator">&gt;</span> []}
309 84:       <span class="ruby-keyword kw">end</span>
310 </pre>
311           </div>
312         </div>
313       </div>
314
315       <div id="method-M000351" class="method-detail">
316         <a name="M000351"></a>
317
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>
321           </a>
322         </div>
323       
324         <div class="method-description">
325           <p>
326 Wrapper to create command line <a
327 href="Application.html#M000354">options</a>
328 </p>
329 <pre>
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
337    the supplied value
338
339   option :foo,
340          :description =&gt; &quot;The foo option&quot;
341          :arguments   =&gt; [&quot;--foo ARG&quot;]
342 </pre>
343 <p>
344 after this the value supplied will be in <a
345 href="Application.html#M000353">configuration</a>[:foo]
346 </p>
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">
350 <pre>
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">&gt;</span> <span class="ruby-identifier">name</span>,
354 67:                <span class="ruby-identifier">:description</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
355 68:                <span class="ruby-identifier">:arguments</span> =<span class="ruby-operator">&gt;</span> [],
356 69:                <span class="ruby-identifier">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">String</span>,
357 70:                <span class="ruby-identifier">:required</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">false</span>,
358 71:                <span class="ruby-identifier">:validate</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Proc</span>.<span class="ruby-identifier">new</span> { <span class="ruby-keyword kw">true</span> }}
359 72: 
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>}
361 74: 
362 75:         <span class="ruby-keyword kw">self</span>[<span class="ruby-identifier">:cli_arguments</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">opt</span>
363 76:       <span class="ruby-keyword kw">end</span>
364 </pre>
365           </div>
366         </div>
367       </div>
368
369       <div id="method-M000349" class="method-detail">
370         <a name="M000349"></a>
371
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>
375           </a>
376         </div>
377       
378         <div class="method-description">
379           <p>
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 &#8212;<a
383 href="Application.html#M000364">help</a> output
384 </p>
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">
388 <pre>
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">&lt;&lt;</span> <span class="ruby-identifier">usage</span>
392 36:       <span class="ruby-keyword kw">end</span>
393 </pre>
394           </div>
395         </div>
396       </div>
397
398       <h3 class="section-bar">Public Instance methods</h3>
399
400       <div id="method-M000362" class="method-detail">
401         <a name="M000362"></a>
402
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>
406           </a>
407         </div>
408       
409         <div class="method-description">
410           <p>
411 Returns an array of all the arguments built using calls to optin
412 </p>
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">
416 <pre>
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>
421 </pre>
422           </div>
423         </div>
424       </div>
425
426       <div id="method-M000360" class="method-detail">
427         <a name="M000360"></a>
428
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>
432           </a>
433         </div>
434       
435         <div class="method-description">
436           <p>
437 Retrieve the current application <a
438 href="Application.html#M000348">description</a>
439 </p>
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">
443 <pre>
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>
448 </pre>
449           </div>
450         </div>
451       </div>
452
453       <div id="method-M000363" class="method-detail">
454         <a name="M000363"></a>
455
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>
459           </a>
460         </div>
461       
462         <div class="method-description">
463           <p>
464 Handles failure, if we&#8216;re far enough in the initialization phase it
465 will log backtraces if its in verbose mode only
466 </p>
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">
470 <pre>
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>
478 259: 
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">&quot;\nThe %s application failed to run: %s: %s\n&quot;</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>)]
481 262: 
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">&quot;Use the 'mco doc %s' command for details about this error&quot;</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">&quot;Use the 'mco doc %s' command for details about this error, use -v for full error backtrace details&quot;</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">&quot;\nThe %s application failed to run: %s\n&quot;</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">&quot;\nThe %s application failed to run, use -v for full error backtrace details: %s\n&quot;</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>
495 276: 
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">&lt;&lt;</span> <span class="ruby-constant">Util</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">:red</span>, <span class="ruby-value str">&quot;  &lt;----&quot;</span>)
498 279:         <span class="ruby-identifier">err_dest</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;\n%s %s&quot;</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">&quot;(#{e.class.to_s})&quot;</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">&quot;\tfrom #{l}&quot;</span>}
500 281:       <span class="ruby-keyword kw">end</span>
501 282: 
502 283:       <span class="ruby-identifier">disconnect</span>
503 284: 
504 285:       <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
505 286:     <span class="ruby-keyword kw">end</span>
506 </pre>
507           </div>
508         </div>
509       </div>
510
511       <div id="method-M000359" class="method-detail">
512         <a name="M000359"></a>
513
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>
517           </a>
518         </div>
519       
520         <div class="method-description">
521           <p>
522 Retrieves the full hash of application <a
523 href="Application.html#M000354">options</a>
524 </p>
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">
528 <pre>
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>
533 </pre>
534           </div>
535         </div>
536       </div>
537
538       <div id="method-M000357" class="method-detail">
539         <a name="M000357"></a>
540
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>
544           </a>
545         </div>
546       
547         <div class="method-description">
548           <p>
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
552 </p>
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">
556 <pre>
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">&gt;</span> <span class="ruby-keyword kw">false</span>}
560 137: 
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">&quot;&quot;</span>
564 141: 
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">&quot;&quot;</span>
567 144: 
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">&quot;Usage: #{u}&quot;</span>
570 147:           <span class="ruby-keyword kw">end</span>
571 148: 
572 149:           <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;&quot;</span>
573 150:         <span class="ruby-keyword kw">end</span>
574 151: 
575 152:         <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;Application Options&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">application_cli_arguments</span>.<span class="ruby-identifier">empty?</span>
576 153: 
577 154:         <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">define_tail</span> <span class="ruby-value str">&quot;&quot;</span>
578 155:         <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">define_tail</span> <span class="ruby-node">&quot;The Marionette Collective #{MCollective.version}&quot;</span>
579 156: 
580 157: 
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> = []
583 160: 
584 161:           <span class="ruby-identifier">opts_array</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">:on</span>
585 162: 
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>
590 167: 
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">&lt;&lt;</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">&lt;&lt;</span> <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:arguments</span>]
596 173:           <span class="ruby-keyword kw">end</span>
597 174: 
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">&lt;&lt;</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">&amp;&amp;</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>])
600 177: 
601 178:           <span class="ruby-identifier">opts_array</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">carg</span>[<span class="ruby-identifier">:description</span>]
602 179: 
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>)
607 184: 
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>
610 187: 
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>)
614 191: 
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">&lt;&lt;</span> <span class="ruby-identifier">v</span>
617 194:             <span class="ruby-keyword kw">end</span>
618 195: 
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>)
622 199: 
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>
629 </pre>
630           </div>
631         </div>
632       </div>
633
634       <div id="method-M000361" class="method-detail">
635         <a name="M000361"></a>
636
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>
640           </a>
641         </div>
642       
643         <div class="method-description">
644           <p>
645 Return the current <a href="Application.html#M000349">usage</a> text false
646 if nothing is set
647 </p>
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">
651 <pre>
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>]
655 241: 
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>
658 </pre>
659           </div>
660         </div>
661       </div>
662
663       <div id="method-M000356" class="method-detail">
664         <a name="M000356"></a>
665
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>
669           </a>
670         </div>
671       
672         <div class="method-description">
673           <p>
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>
677 </p>
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">
681 <pre>
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">&gt;</span> <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">:progress_bar</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>}, <span class="ruby-value str">&quot;filter&quot;</span>, <span class="ruby-identifier">application_options</span>[<span class="ruby-identifier">:exclude_arg_sections</span>])
685 113: 
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>
690 118: 
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">&quot;rpc&quot;</span>)
692 120:       <span class="ruby-keyword kw">end</span>
693 121: 
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>
695 123: 
696 124:       <span class="ruby-identifier">validate_cli_options</span>
697 125: 
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>)
699 127: 
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">&gt;</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>
704 </pre>
705           </div>
706         </div>
707       </div>
708
709       <div id="method-M000353" class="method-detail">
710         <a name="M000353"></a>
711
712         <div class="method-heading">
713           <a href="#M000353" class="method-signature">
714           <span class="method-name">configuration</span><span class="method-args">()</span>
715           </a>
716         </div>
717       
718         <div class="method-description">
719           <p>
720 The application <a href="Application.html#M000353">configuration</a> built
721 from CLI arguments
722 </p>
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">
726 <pre>
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>
732 </pre>
733           </div>
734         </div>
735       </div>
736
737       <div id="method-M000366" class="method-detail">
738         <a name="M000366"></a>
739
740         <div class="method-heading">
741           <a href="#M000366" class="method-signature">
742           <span class="method-name">disconnect</span><span class="method-args">()</span>
743           </a>
744         </div>
745       
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">
750 <pre>
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">&quot;connector_plugin&quot;</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>
756 </pre>
757           </div>
758         </div>
759       </div>
760
761       <div id="method-M000369" class="method-detail">
762         <a name="M000369"></a>
763
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>
767           </a>
768         </div>
769       
770         <div class="method-description">
771           <p>
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>
774 </p>
775 <p>
776 Exit with 0 if nodes were discovered and all passed Exit with 0 if no
777 discovery were done and &gt; 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
782 </p>
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">
786 <pre>
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>
791 </pre>
792           </div>
793         </div>
794       </div>
795
796       <div id="method-M000368" class="method-detail">
797         <a name="M000368"></a>
798
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>
802           </a>
803         </div>
804       
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">
809 <pre>
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">&gt;</span> <span class="ruby-value">0</span>,
813 324:                        <span class="ruby-identifier">:discovered</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>,
814 325:                        <span class="ruby-identifier">:okcount</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>,
815 326:                        <span class="ruby-identifier">:failcount</span> =<span class="ruby-operator">&gt;</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>)
816 327: 
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">&amp;&amp;</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">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</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">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">request_stats</span>[<span class="ruby-identifier">:failcount</span>] <span class="ruby-operator">&gt;</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">&amp;&amp;</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>
824 </pre>
825           </div>
826         </div>
827       </div>
828
829       <div id="method-M000364" class="method-detail">
830         <a name="M000364"></a>
831
832         <div class="method-heading">
833           <a href="#M000364" class="method-signature">
834           <span class="method-name">help</span><span class="method-args">()</span>
835           </a>
836         </div>
837       
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">
842 <pre>
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>
847 </pre>
848           </div>
849         </div>
850       </div>
851
852       <div id="method-M000367" class="method-detail">
853         <a name="M000367"></a>
854
855         <div class="method-heading">
856           <a href="#M000367" class="method-signature">
857           <span class="method-name">main</span><span class="method-args">()</span>
858           </a>
859         </div>
860       
861         <div class="method-description">
862           <p>
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
865 method.
866 </p>
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">
870 <pre>
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">&quot;Applications need to supply a 'main' method&quot;</span>
874 319:       <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
875 320:     <span class="ruby-keyword kw">end</span>
876 </pre>
877           </div>
878         </div>
879       </div>
880
881       <div id="method-M000354" class="method-detail">
882         <a name="M000354"></a>
883
884         <div class="method-heading">
885           <a href="#M000354" class="method-signature">
886           <span class="method-name">options</span><span class="method-args">()</span>
887           </a>
888         </div>
889       
890         <div class="method-description">
891           <p>
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>
894 </p>
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">
898 <pre>
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>
903 </pre>
904           </div>
905         </div>
906       </div>
907
908       <div id="method-M000370" class="method-detail">
909         <a name="M000370"></a>
910
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>
914           </a>
915         </div>
916       
917         <div class="method-description">
918           <p>
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
925 </p>
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">
929 <pre>
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>
934 355: 
935 356:       <span class="ruby-keyword kw">super</span>
936 357:     <span class="ruby-keyword kw">end</span>
937 </pre>
938           </div>
939         </div>
940       </div>
941
942       <div id="method-M000365" class="method-detail">
943         <a name="M000365"></a>
944
945         <div class="method-heading">
946           <a href="#M000365" class="method-signature">
947           <span class="method-name">run</span><span class="method-args">()</span>
948           </a>
949         </div>
950       
951         <div class="method-description">
952           <p>
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
959 </p>
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">
963 <pre>
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>
967 297: 
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>)
969 299: 
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>
971 301: 
972 302:       <span class="ruby-identifier">main</span>
973 303: 
974 304:       <span class="ruby-identifier">disconnect</span>
975 305: 
976 306:     <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</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>
979 </pre>
980           </div>
981         </div>
982       </div>
983
984       <div id="method-M000358" class="method-detail">
985         <a name="M000358"></a>
986
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>
990           </a>
991         </div>
992       
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">
997 <pre>
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">&quot;The #{carg[:name]} option is mandatory&quot;</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>
1011 219: 
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">&quot;\nPlease run with --help for detailed help&quot;</span>
1014 222:         <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
1015 223:       <span class="ruby-keyword kw">end</span>
1016 224: 
1017 225: 
1018 226:     <span class="ruby-keyword kw">end</span>
1019 </pre>
1020           </div>
1021         </div>
1022       </div>
1023
1024       <div id="method-M000355" class="method-detail">
1025         <a name="M000355"></a>
1026
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>
1030           </a>
1031         </div>
1032       
1033         <div class="method-description">
1034           <p>
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
1038 </p>
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">
1042 <pre>
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>)
1046 102: 
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">&quot;Validation of #{name} failed: #{validation_result}&quot;</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>
1052 </pre>
1053           </div>
1054         </div>
1055       </div>
1056
1057
1058     </div>
1059
1060
1061   </div>
1062
1063
1064 <div id="validator-badges">
1065   <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
1066 </div>
1067
1068 </body>
1069 </html>