Update version according to OSCI-856
[packages/precise/mcollective.git] / doc / classes / MCollective / DDL / Base.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::DDL::Base</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::DDL::Base</td>
54         </tr>
55         <tr class="top-aligned-row">
56             <td><strong>In:</strong></td>
57             <td>
58                 <a href="../../../files/lib/mcollective/ddl/base_rb.html">
59                 lib/mcollective/ddl/base.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     <div id="description">
82       <p>
83 The base class for all kinds of <a href="../DDL.html">DDL</a> files. <a
84 href="../DDL.html">DDL</a> files when run gets parsed and builds up a hash
85 of the basic primitive types, ideally restricted so it can be converted to
86 JSON though today there are some Ruby Symbols in them which might be fixed
87 laster on.
88 </p>
89 <p>
90 The Hash being built should be stored in @entities, the format is generally
91 not prescribed but there&#8216;s a definite feel to how <a
92 href="../DDL.html">DDL</a> files look so study the agent and discovery ones
93 to see how the structure applies to very different use cases.
94 </p>
95 <p>
96 For every plugin type you should have a single word name - that corresponds
97 to the directory in the libdir where these plugins live. If you need
98 anything above and beyond &#8216;<a
99 href="Base.html#M000177">metadata</a>&#8217; in your plugin <a
100 href="../DDL.html">DDL</a> then add a PlugintypeDDL class here and add your
101 specific behaviors to those.
102 </p>
103
104     </div>
105
106
107    </div>
108
109     <div id="method-list">
110       <h3 class="section-bar">Methods</h3>
111
112       <div class="name-list">
113       <a href="#M000171">findddlfile</a>&nbsp;&nbsp;
114       <a href="#M000167">help</a>&nbsp;&nbsp;
115       <a href="#M000174">input</a>&nbsp;&nbsp;
116       <a href="#M000170">loadddlfile</a>&nbsp;&nbsp;
117       <a href="#M000177">metadata</a>&nbsp;&nbsp;
118       <a href="#M000166">new</a>&nbsp;&nbsp;
119       <a href="#M000175">output</a>&nbsp;&nbsp;
120       <a href="#M000176">requires</a>&nbsp;&nbsp;
121       <a href="#M000169">template_for_plugintype</a>&nbsp;&nbsp;
122       <a href="#M000168">usage</a>&nbsp;&nbsp;
123       <a href="#M000173">validate_input_argument</a>&nbsp;&nbsp;
124       <a href="#M000172">validate_requirements</a>&nbsp;&nbsp;
125       </div>
126     </div>
127
128   </div>
129
130
131     <!-- if includes -->
132     <div id="includes">
133       <h3 class="section-bar">Included Modules</h3>
134
135       <div id="includes-list">
136         <span class="include-name"><a href="../Translatable.html">Translatable</a></span>
137       </div>
138     </div>
139
140     <div id="section">
141
142
143
144
145
146     <div id="attribute-list">
147       <h3 class="section-bar">Attributes</h3>
148
149       <div class="name-list">
150         <table>
151         <tr class="top-aligned-row context-row">
152           <td class="context-item-name">entities</td>
153           <td class="context-item-value">&nbsp;[R]&nbsp;</td>
154           <td class="context-item-desc"></td>
155         </tr>
156         <tr class="top-aligned-row context-row">
157           <td class="context-item-name">meta</td>
158           <td class="context-item-value">&nbsp;[R]&nbsp;</td>
159           <td class="context-item-desc"></td>
160         </tr>
161         <tr class="top-aligned-row context-row">
162           <td class="context-item-name">pluginname</td>
163           <td class="context-item-value">&nbsp;[R]&nbsp;</td>
164           <td class="context-item-desc"></td>
165         </tr>
166         <tr class="top-aligned-row context-row">
167           <td class="context-item-name">plugintype</td>
168           <td class="context-item-value">&nbsp;[R]&nbsp;</td>
169           <td class="context-item-desc"></td>
170         </tr>
171         <tr class="top-aligned-row context-row">
172           <td class="context-item-name">requirements</td>
173           <td class="context-item-value">&nbsp;[R]&nbsp;</td>
174           <td class="context-item-desc"></td>
175         </tr>
176         <tr class="top-aligned-row context-row">
177           <td class="context-item-name">usage</td>
178           <td class="context-item-value">&nbsp;[R]&nbsp;</td>
179           <td class="context-item-desc"></td>
180         </tr>
181         </table>
182       </div>
183     </div>
184       
185
186
187     <!-- if method_list -->
188     <div id="methods">
189       <h3 class="section-bar">Public Class methods</h3>
190
191       <div id="method-M000166" class="method-detail">
192         <a name="M000166"></a>
193
194         <div class="method-heading">
195           <a href="#M000166" class="method-signature">
196           <span class="method-name">new</span><span class="method-args">(plugin, plugintype=:agent, loadddl=true)</span>
197           </a>
198         </div>
199       
200         <div class="method-description">
201           <p><a class="source-toggle" href="#"
202             onclick="toggleCode('M000166-source');return false;">[Source]</a></p>
203           <div class="method-source-code" id="M000166-source">
204 <pre>
205     <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 24</span>
206 24:       <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">plugin</span>, <span class="ruby-identifier">plugintype</span>=<span class="ruby-identifier">:agent</span>, <span class="ruby-identifier">loadddl</span>=<span class="ruby-keyword kw">true</span>)
207 25:         <span class="ruby-ivar">@entities</span> = {}
208 26:         <span class="ruby-ivar">@meta</span> = {}
209 27:         <span class="ruby-ivar">@usage</span> = <span class="ruby-value str">&quot;&quot;</span>
210 28:         <span class="ruby-ivar">@config</span> = <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>
211 29:         <span class="ruby-ivar">@pluginname</span> = <span class="ruby-identifier">plugin</span>
212 30:         <span class="ruby-ivar">@plugintype</span> = <span class="ruby-identifier">plugintype</span>.<span class="ruby-identifier">to_sym</span>
213 31:         <span class="ruby-ivar">@requirements</span> = {}
214 32: 
215 33:         <span class="ruby-identifier">loadddlfile</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">loadddl</span>
216 34:       <span class="ruby-keyword kw">end</span>
217 </pre>
218           </div>
219         </div>
220       </div>
221
222       <h3 class="section-bar">Public Instance methods</h3>
223
224       <div id="method-M000171" class="method-detail">
225         <a name="M000171"></a>
226
227         <div class="method-heading">
228           <a href="#M000171" class="method-signature">
229           <span class="method-name">findddlfile</span><span class="method-args">(ddlname=nil, ddltype=nil)</span>
230           </a>
231         </div>
232       
233         <div class="method-description">
234           <p><a class="source-toggle" href="#"
235             onclick="toggleCode('M000171-source');return false;">[Source]</a></p>
236           <div class="method-source-code" id="M000171-source">
237 <pre>
238      <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 89</span>
239  89:       <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">findddlfile</span>(<span class="ruby-identifier">ddlname</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">ddltype</span>=<span class="ruby-keyword kw">nil</span>)
240  90:         <span class="ruby-identifier">ddlname</span> = <span class="ruby-ivar">@pluginname</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">ddlname</span>
241  91:         <span class="ruby-identifier">ddltype</span> = <span class="ruby-ivar">@plugintype</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">ddltype</span>
242  92: 
243  93:         <span class="ruby-ivar">@config</span>.<span class="ruby-identifier">libdir</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">libdir</span><span class="ruby-operator">|</span>
244  94:           <span class="ruby-identifier">ddlfile</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>([<span class="ruby-identifier">libdir</span>, <span class="ruby-value str">&quot;mcollective&quot;</span>, <span class="ruby-identifier">ddltype</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-node">&quot;#{ddlname}.ddl&quot;</span>])
245  95:           <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">ddlfile</span>)
246  96:             <span class="ruby-identifier">log_code</span>(<span class="ruby-identifier">:PLMC18</span>, <span class="ruby-value str">&quot;Found %{ddlname} ddl at %{ddlfile}&quot;</span>, <span class="ruby-identifier">:debug</span>, <span class="ruby-identifier">:ddlname</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">ddlname</span>, <span class="ruby-identifier">:ddlfile</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">ddlfile</span>)
247  97:             <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">ddlfile</span>
248  98:           <span class="ruby-keyword kw">end</span>
249  99:         <span class="ruby-keyword kw">end</span>
250 100:         <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
251 101:       <span class="ruby-keyword kw">end</span>
252 </pre>
253           </div>
254         </div>
255       </div>
256
257       <div id="method-M000167" class="method-detail">
258         <a name="M000167"></a>
259
260         <div class="method-heading">
261           <a href="#M000167" class="method-signature">
262           <span class="method-name">help</span><span class="method-args">(template=nil)</span>
263           </a>
264         </div>
265       
266         <div class="method-description">
267           <p>
268 Generates <a href="Base.html#M000167">help</a> using the template based on
269 the data created with <a href="Base.html#M000177">metadata</a> and <a
270 href="Base.html#M000174">input</a>.
271 </p>
272 <p>
273 If no template name is provided one will be chosen based on the plugin
274 type. If the provided template path is not absolute then the template will
275 be loaded either from the config dir and if that does not exist, default to
276 /etc/mcollective
277 </p>
278           <p><a class="source-toggle" href="#"
279             onclick="toggleCode('M000167-source');return false;">[Source]</a></p>
280           <div class="method-source-code" id="M000167-source">
281 <pre>
282     <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 44</span>
283 44:       <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">help</span>(<span class="ruby-identifier">template</span>=<span class="ruby-keyword kw">nil</span>)
284 45:         <span class="ruby-identifier">template</span> = <span class="ruby-identifier">template_for_plugintype</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">template</span>
285 46:         <span class="ruby-identifier">template</span> = <span class="ruby-constant">Util</span>.<span class="ruby-identifier">templatepath</span>(<span class="ruby-identifier">template</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">Util</span>.<span class="ruby-identifier">absolute_path?</span>(<span class="ruby-identifier">template</span>)
286 47: 
287 48:         <span class="ruby-identifier">template</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">template</span>)
288 49:         <span class="ruby-identifier">meta</span> = <span class="ruby-ivar">@meta</span>
289 50:         <span class="ruby-identifier">entities</span> = <span class="ruby-ivar">@entities</span>
290 51: 
291 52:         <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">template</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;metadata-help.erb&quot;</span>
292 53:           <span class="ruby-identifier">metadata_template</span> = <span class="ruby-constant">Util</span>.<span class="ruby-identifier">templatepath</span>(<span class="ruby-value str">&quot;metadata-help.erb&quot;</span>)
293 54:           <span class="ruby-identifier">metadata_template</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">metadata_template</span>)
294 55:           <span class="ruby-identifier">metastring</span> = <span class="ruby-constant">ERB</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">metadata_template</span>, <span class="ruby-value">0</span>, <span class="ruby-value str">'%'</span>)
295 56:           <span class="ruby-identifier">metastring</span> = <span class="ruby-identifier">metastring</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">binding</span>)
296 57:         <span class="ruby-keyword kw">end</span>
297 58: 
298 59:         <span class="ruby-identifier">erb</span> = <span class="ruby-constant">ERB</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">template</span>, <span class="ruby-value">0</span>, <span class="ruby-value str">'%'</span>)
299 60:         <span class="ruby-identifier">erb</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">binding</span>)
300 61:       <span class="ruby-keyword kw">end</span>
301 </pre>
302           </div>
303         </div>
304       </div>
305
306       <div id="method-M000174" class="method-detail">
307         <a name="M000174"></a>
308
309         <div class="method-heading">
310           <a href="#M000174" class="method-signature">
311           <span class="method-name">input</span><span class="method-args">(argument, properties)</span>
312           </a>
313         </div>
314       
315         <div class="method-description">
316           <p>
317 Registers an <a href="Base.html#M000174">input</a> argument for a given
318 action
319 </p>
320 <p>
321 See the documentation for action for how to use this
322 </p>
323           <p><a class="source-toggle" href="#"
324             onclick="toggleCode('M000174-source');return false;">[Source]</a></p>
325           <div class="method-source-code" id="M000174-source">
326 <pre>
327      <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 153</span>
328 153:       <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">input</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">properties</span>)
329 154:         <span class="ruby-identifier">raise_code</span>(<span class="ruby-identifier">:PLMC22</span>, <span class="ruby-value str">&quot;Cannot determine what entity input '%{entity}' belongs to&quot;</span>, <span class="ruby-identifier">:error</span>, <span class="ruby-identifier">:entity</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@current_entity</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@current_entity</span>
330 155: 
331 156:         <span class="ruby-identifier">entity</span> = <span class="ruby-ivar">@current_entity</span>
332 157: 
333 158:         [<span class="ruby-identifier">:prompt</span>, <span class="ruby-identifier">:description</span>, <span class="ruby-identifier">:type</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span>
334 159:           <span class="ruby-identifier">raise_code</span>(<span class="ruby-identifier">:PLMC23</span>, <span class="ruby-value str">&quot;Input needs a :%{property} property&quot;</span>, <span class="ruby-identifier">:debug</span>, <span class="ruby-identifier">:property</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">arg</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">arg</span>)
335 160:         <span class="ruby-keyword kw">end</span>
336 161: 
337 162:         <span class="ruby-ivar">@entities</span>[<span class="ruby-identifier">entity</span>][<span class="ruby-identifier">:input</span>][<span class="ruby-identifier">argument</span>] = {<span class="ruby-identifier">:prompt</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:prompt</span>],
338 163:                                                <span class="ruby-identifier">:description</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:description</span>],
339 164:                                                <span class="ruby-identifier">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:type</span>],
340 165:                                                <span class="ruby-identifier">:default</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:default</span>],
341 166:                                                <span class="ruby-identifier">:optional</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:optional</span>]}
342 167: 
343 168:         <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:type</span>]
344 169:           <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:string</span>
345 170:             <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Input type :string needs a :validation argument&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:validation</span>)
346 171:             <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Input type :string needs a :maxlength argument&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:maxlength</span>)
347 172: 
348 173:             <span class="ruby-ivar">@entities</span>[<span class="ruby-identifier">entity</span>][<span class="ruby-identifier">:input</span>][<span class="ruby-identifier">argument</span>][<span class="ruby-identifier">:validation</span>] = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:validation</span>]
349 174:             <span class="ruby-ivar">@entities</span>[<span class="ruby-identifier">entity</span>][<span class="ruby-identifier">:input</span>][<span class="ruby-identifier">argument</span>][<span class="ruby-identifier">:maxlength</span>] = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:maxlength</span>]
350 175: 
351 176:           <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:list</span>
352 177:             <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Input type :list needs a :list argument&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:list</span>)
353 178: 
354 179:             <span class="ruby-ivar">@entities</span>[<span class="ruby-identifier">entity</span>][<span class="ruby-identifier">:input</span>][<span class="ruby-identifier">argument</span>][<span class="ruby-identifier">:list</span>] = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:list</span>]
355 180:         <span class="ruby-keyword kw">end</span>
356 181:       <span class="ruby-keyword kw">end</span>
357 </pre>
358           </div>
359         </div>
360       </div>
361
362       <div id="method-M000170" class="method-detail">
363         <a name="M000170"></a>
364
365         <div class="method-heading">
366           <a href="#M000170" class="method-signature">
367           <span class="method-name">loadddlfile</span><span class="method-args">()</span>
368           </a>
369         </div>
370       
371         <div class="method-description">
372           <p><a class="source-toggle" href="#"
373             onclick="toggleCode('M000170-source');return false;">[Source]</a></p>
374           <div class="method-source-code" id="M000170-source">
375 <pre>
376     <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 81</span>
377 81:       <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">loadddlfile</span>
378 82:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ddlfile</span> = <span class="ruby-identifier">findddlfile</span>
379 83:           <span class="ruby-identifier">instance_eval</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">ddlfile</span>), <span class="ruby-identifier">ddlfile</span>, <span class="ruby-value">1</span>)
380 84:         <span class="ruby-keyword kw">else</span>
381 85:           <span class="ruby-identifier">raise_code</span>(<span class="ruby-identifier">:PLMC40</span>, <span class="ruby-value str">&quot;Can't find DDL for %{type} plugin '%{name}'&quot;</span>, <span class="ruby-identifier">:debug</span>, <span class="ruby-identifier">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@plugintype</span>, <span class="ruby-identifier">:name</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@pluginname</span>)
382 86:         <span class="ruby-keyword kw">end</span>
383 87:       <span class="ruby-keyword kw">end</span>
384 </pre>
385           </div>
386         </div>
387       </div>
388
389       <div id="method-M000177" class="method-detail">
390         <a name="M000177"></a>
391
392         <div class="method-heading">
393           <a href="#M000177" class="method-signature">
394           <span class="method-name">metadata</span><span class="method-args">(meta)</span>
395           </a>
396         </div>
397       
398         <div class="method-description">
399           <p>
400 Registers meta data for the introspection hash
401 </p>
402           <p><a class="source-toggle" href="#"
403             onclick="toggleCode('M000177-source');return false;">[Source]</a></p>
404           <div class="method-source-code" id="M000177-source">
405 <pre>
406      <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 215</span>
407 215:       <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">metadata</span>(<span class="ruby-identifier">meta</span>)
408 216:         [<span class="ruby-identifier">:name</span>, <span class="ruby-identifier">:description</span>, <span class="ruby-identifier">:author</span>, <span class="ruby-identifier">:license</span>, <span class="ruby-identifier">:version</span>, <span class="ruby-identifier">:url</span>, <span class="ruby-identifier">:timeout</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span>
409 217:           <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Metadata needs a :#{arg} property&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">meta</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">arg</span>)
410 218:         <span class="ruby-keyword kw">end</span>
411 219: 
412 220:         <span class="ruby-ivar">@meta</span> = <span class="ruby-identifier">meta</span>
413 221:       <span class="ruby-keyword kw">end</span>
414 </pre>
415           </div>
416         </div>
417       </div>
418
419       <div id="method-M000175" class="method-detail">
420         <a name="M000175"></a>
421
422         <div class="method-heading">
423           <a href="#M000175" class="method-signature">
424           <span class="method-name">output</span><span class="method-args">(argument, properties)</span>
425           </a>
426         </div>
427       
428         <div class="method-description">
429           <p>
430 Registers an <a href="Base.html#M000175">output</a> argument for a given
431 action
432 </p>
433 <p>
434 See the documentation for action for how to use this
435 </p>
436           <p><a class="source-toggle" href="#"
437             onclick="toggleCode('M000175-source');return false;">[Source]</a></p>
438           <div class="method-source-code" id="M000175-source">
439 <pre>
440      <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 186</span>
441 186:       <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">output</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">properties</span>)
442 187:         <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Cannot figure out what action input #{argument} belongs to&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@current_entity</span>
443 188:         <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Output #{argument} needs a description argument&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:description</span>)
444 189:         <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Output #{argument} needs a display_as argument&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:display_as</span>)
445 190: 
446 191:         <span class="ruby-identifier">action</span> = <span class="ruby-ivar">@current_entity</span>
447 192: 
448 193:         <span class="ruby-ivar">@entities</span>[<span class="ruby-identifier">action</span>][<span class="ruby-identifier">:output</span>][<span class="ruby-identifier">argument</span>] = {<span class="ruby-identifier">:description</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:description</span>],
449 194:                                                 <span class="ruby-identifier">:display_as</span>  =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:display_as</span>],
450 195:                                                 <span class="ruby-identifier">:default</span>     =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:default</span>]}
451 196:       <span class="ruby-keyword kw">end</span>
452 </pre>
453           </div>
454         </div>
455       </div>
456
457       <div id="method-M000176" class="method-detail">
458         <a name="M000176"></a>
459
460         <div class="method-heading">
461           <a href="#M000176" class="method-signature">
462           <span class="method-name">requires</span><span class="method-args">(requirement)</span>
463           </a>
464         </div>
465       
466         <div class="method-description">
467           <p><a class="source-toggle" href="#"
468             onclick="toggleCode('M000176-source');return false;">[Source]</a></p>
469           <div class="method-source-code" id="M000176-source">
470 <pre>
471      <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 198</span>
472 198:       <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">requires</span>(<span class="ruby-identifier">requirement</span>)
473 199:         <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Requirement should be a hash in the form :item =&gt; 'requirement'&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">requirement</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
474 200: 
475 201:         <span class="ruby-identifier">valid_requirements</span> = [<span class="ruby-identifier">:mcollective</span>]
476 202: 
477 203:         <span class="ruby-identifier">requirement</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span><span class="ruby-operator">|</span>
478 204:           <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">valid_requirements</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">key</span>)
479 205:             <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Requirement %s is not a valid requirement, only %s is supported&quot;</span> <span class="ruby-operator">%</span> [<span class="ruby-identifier">key</span>, <span class="ruby-identifier">valid_requirements</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;, &quot;</span>)]
480 206:           <span class="ruby-keyword kw">end</span>
481 207: 
482 208:           <span class="ruby-ivar">@requirements</span>[<span class="ruby-identifier">key</span>] = <span class="ruby-identifier">requirement</span>[<span class="ruby-identifier">key</span>]
483 209:         <span class="ruby-keyword kw">end</span>
484 210: 
485 211:         <span class="ruby-identifier">validate_requirements</span>
486 212:       <span class="ruby-keyword kw">end</span>
487 </pre>
488           </div>
489         </div>
490       </div>
491
492       <div id="method-M000169" class="method-detail">
493         <a name="M000169"></a>
494
495         <div class="method-heading">
496           <a href="#M000169" class="method-signature">
497           <span class="method-name">template_for_plugintype</span><span class="method-args">()</span>
498           </a>
499         </div>
500       
501         <div class="method-description">
502           <p><a class="source-toggle" href="#"
503             onclick="toggleCode('M000169-source');return false;">[Source]</a></p>
504           <div class="method-source-code" id="M000169-source">
505 <pre>
506     <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 67</span>
507 67:       <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">template_for_plugintype</span>
508 68:         <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@plugintype</span>
509 69:         <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:agent</span>
510 70:           <span class="ruby-keyword kw">return</span> <span class="ruby-value str">&quot;rpc-help.erb&quot;</span>
511 71:         <span class="ruby-keyword kw">else</span>
512 72:           <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-constant">Util</span>.<span class="ruby-identifier">templatepath</span>(<span class="ruby-node">&quot;#{@plugintype}-help.erb&quot;</span>))
513 73:             <span class="ruby-keyword kw">return</span> <span class="ruby-node">&quot;#{@plugintype}-help.erb&quot;</span>
514 74:           <span class="ruby-keyword kw">else</span>
515 75:             <span class="ruby-comment cmt"># Default help template gets loaded if plugintype-help does not exist.</span>
516 76:             <span class="ruby-keyword kw">return</span> <span class="ruby-value str">&quot;metadata-help.erb&quot;</span>
517 77:           <span class="ruby-keyword kw">end</span>
518 78:         <span class="ruby-keyword kw">end</span>
519 79:       <span class="ruby-keyword kw">end</span>
520 </pre>
521           </div>
522         </div>
523       </div>
524
525       <div id="method-M000168" class="method-detail">
526         <a name="M000168"></a>
527
528         <div class="method-heading">
529           <a href="#M000168" class="method-signature">
530           <span class="method-name">usage</span><span class="method-args">(usage_text)</span>
531           </a>
532         </div>
533       
534         <div class="method-description">
535           <p><a class="source-toggle" href="#"
536             onclick="toggleCode('M000168-source');return false;">[Source]</a></p>
537           <div class="method-source-code" id="M000168-source">
538 <pre>
539     <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 63</span>
540 63:       <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">usage</span>(<span class="ruby-identifier">usage_text</span>)
541 64:         <span class="ruby-ivar">@usage</span> = <span class="ruby-identifier">usage_text</span>
542 65:       <span class="ruby-keyword kw">end</span>
543 </pre>
544           </div>
545         </div>
546       </div>
547
548       <div id="method-M000173" class="method-detail">
549         <a name="M000173"></a>
550
551         <div class="method-heading">
552           <a href="#M000173" class="method-signature">
553           <span class="method-name">validate_input_argument</span><span class="method-args">(input, key, argument)</span>
554           </a>
555         </div>
556       
557         <div class="method-description">
558           <p>
559 validate strings, lists and booleans, we&#8216;ll add more types of
560 validators when all the use cases are clear
561 </p>
562 <p>
563 only does validation for arguments actually given, since some might be
564 optional. We validate the presense of the argument earlier so this is a
565 safe assumption, just to skip them.
566 </p>
567 <p>
568 :string can have maxlength and regex. A maxlength of 0 will bypasss checks
569 :list has a array of valid values
570 </p>
571           <p><a class="source-toggle" href="#"
572             onclick="toggleCode('M000173-source');return false;">[Source]</a></p>
573           <div class="method-source-code" id="M000173-source">
574 <pre>
575      <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 127</span>
576 127:       <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">validate_input_argument</span>(<span class="ruby-identifier">input</span>, <span class="ruby-identifier">key</span>, <span class="ruby-identifier">argument</span>)
577 128:         <span class="ruby-constant">Validator</span>.<span class="ruby-identifier">load_validators</span>
578 129: 
579 130:         <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">input</span>[<span class="ruby-identifier">key</span>][<span class="ruby-identifier">:type</span>]
580 131:         <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:string</span>
581 132:           <span class="ruby-constant">Validator</span>.<span class="ruby-identifier">validate</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">:string</span>)
582 133: 
583 134:           <span class="ruby-constant">Validator</span>.<span class="ruby-identifier">length</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">input</span>[<span class="ruby-identifier">key</span>][<span class="ruby-identifier">:maxlength</span>].<span class="ruby-identifier">to_i</span>)
584 135: 
585 136:           <span class="ruby-constant">Validator</span>.<span class="ruby-identifier">validate</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">input</span>[<span class="ruby-identifier">key</span>][<span class="ruby-identifier">:validation</span>])
586 137: 
587 138:         <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:list</span>
588 139:           <span class="ruby-constant">Validator</span>.<span class="ruby-identifier">validate</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">input</span>[<span class="ruby-identifier">key</span>][<span class="ruby-identifier">:list</span>])
589 140: 
590 141:         <span class="ruby-keyword kw">else</span>
591 142:           <span class="ruby-constant">Validator</span>.<span class="ruby-identifier">validate</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">input</span>[<span class="ruby-identifier">key</span>][<span class="ruby-identifier">:type</span>])
592 143:         <span class="ruby-keyword kw">end</span>
593 144: 
594 145:         <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
595 146:       <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
596 147:         <span class="ruby-constant">DDL</span>.<span class="ruby-identifier">validation_fail!</span>(<span class="ruby-identifier">:PLMC21</span>, <span class="ruby-value str">&quot;Cannot validate input '%{input}': %{error}&quot;</span>, <span class="ruby-identifier">:debug</span>, <span class="ruby-identifier">:input</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">key</span>, <span class="ruby-identifier">:error</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">to_s</span>)
597 148:       <span class="ruby-keyword kw">end</span>
598 </pre>
599           </div>
600         </div>
601       </div>
602
603       <div id="method-M000172" class="method-detail">
604         <a name="M000172"></a>
605
606         <div class="method-heading">
607           <a href="#M000172" class="method-signature">
608           <span class="method-name">validate_requirements</span><span class="method-args">()</span>
609           </a>
610         </div>
611       
612         <div class="method-description">
613           <p><a class="source-toggle" href="#"
614             onclick="toggleCode('M000172-source');return false;">[Source]</a></p>
615           <div class="method-source-code" id="M000172-source">
616 <pre>
617      <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 103</span>
618 103:       <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">validate_requirements</span>
619 104:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">requirement</span> = <span class="ruby-ivar">@requirements</span>[<span class="ruby-identifier">:mcollective</span>]
620 105:           <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Util</span>.<span class="ruby-identifier">mcollective_version</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;@DEVELOPMENT_VERSION@&quot;</span>
621 106:             <span class="ruby-identifier">log_code</span>(<span class="ruby-identifier">:PLMC19</span>, <span class="ruby-value str">&quot;DDL requirements validation being skipped in development&quot;</span>, <span class="ruby-identifier">:warn</span>)
622 107:             <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
623 108:           <span class="ruby-keyword kw">end</span>
624 109: 
625 110:           <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Util</span>.<span class="ruby-identifier">versioncmp</span>(<span class="ruby-constant">Util</span>.<span class="ruby-identifier">mcollective_version</span>, <span class="ruby-identifier">requirement</span>) <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
626 111:             <span class="ruby-constant">DDL</span>.<span class="ruby-identifier">validation_fail!</span>(<span class="ruby-identifier">:PLMC20</span>, <span class="ruby-value str">&quot;%{type} plugin '%{name}' requires MCollective version %{requirement} or newer&quot;</span>, <span class="ruby-identifier">:debug</span>, <span class="ruby-identifier">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@plugintype</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">capitalize</span>, <span class="ruby-identifier">:name</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@pluginname</span>, <span class="ruby-identifier">:requirement</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">requirement</span>)
627 112:           <span class="ruby-keyword kw">end</span>
628 113:         <span class="ruby-keyword kw">end</span>
629 114: 
630 115:         <span class="ruby-keyword kw">true</span>
631 116:       <span class="ruby-keyword kw">end</span>
632 </pre>
633           </div>
634         </div>
635       </div>
636
637
638     </div>
639
640
641   </div>
642
643
644 <div id="validator-badges">
645   <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
646 </div>
647
648 </body>
649 </html>