1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5 <html xmlns="http://www.w3.org/1999/xhtml">
7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9 <title>nepi.execution.resource — NEPI 3.0 documentation</title>
11 <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
12 <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
14 <script type="text/javascript">
15 var DOCUMENTATION_OPTIONS = {
16 URL_ROOT: '../../../',
18 COLLAPSE_INDEX: false,
23 <script type="text/javascript" src="../../../_static/jquery.js"></script>
24 <script type="text/javascript" src="../../../_static/underscore.js"></script>
25 <script type="text/javascript" src="../../../_static/doctools.js"></script>
26 <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
27 <link rel="up" title="Module code" href="../../index.html" />
33 <li class="right" style="margin-right: 10px">
34 <a href="../../../genindex.html" title="General Index"
35 accesskey="I">index</a></li>
37 <a href="../../../py-modindex.html" title="Python Module Index"
39 <li><a href="../../../index.html">NEPI 3.0 documentation</a> »</li>
40 <li><a href="../../index.html" accesskey="U">Module code</a> »</li>
43 <div class="sphinxsidebar">
44 <div class="sphinxsidebarwrapper">
45 <div id="searchbox" style="display: none">
47 <form class="search" action="../../../search.html" method="get">
48 <input type="text" name="q" />
49 <input type="submit" value="Go" />
50 <input type="hidden" name="check_keywords" value="yes" />
51 <input type="hidden" name="area" value="default" />
53 <p class="searchtip" style="font-size: 90%">
54 Enter search terms or a module, class or function name.
57 <script type="text/javascript">$('#searchbox').show(0);</script>
61 <div class="document">
62 <div class="documentwrapper">
63 <div class="bodywrapper">
66 <h1>Source code for nepi.execution.resource</h1><div class="highlight"><pre>
67 <span class="c">#</span>
68 <span class="c"># NEPI, a framework to manage network experiments</span>
69 <span class="c"># Copyright (C) 2013 INRIA</span>
70 <span class="c">#</span>
71 <span class="c"># This program is free software: you can redistribute it and/or modify</span>
72 <span class="c"># it under the terms of the GNU General Public License version 2 as</span>
73 <span class="c"># published by the Free Software Foundation;</span>
74 <span class="c">#</span>
75 <span class="c"># This program is distributed in the hope that it will be useful,</span>
76 <span class="c"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
77 <span class="c"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
78 <span class="c"># GNU General Public License for more details.</span>
79 <span class="c">#</span>
80 <span class="c"># You should have received a copy of the GNU General Public License</span>
81 <span class="c"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
82 <span class="c">#</span>
83 <span class="c"># Author: Alina Quereilhac <alina.quereilhac@inria.fr></span>
85 <span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiff</span><span class="p">,</span> <span class="n">tdiffsec</span><span class="p">,</span> <span class="n">stabsformat</span>
86 <span class="kn">from</span> <span class="nn">nepi.util.logger</span> <span class="kn">import</span> <span class="n">Logger</span>
87 <span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
88 <span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">TraceAttr</span>
90 <span class="kn">import</span> <span class="nn">copy</span>
91 <span class="kn">import</span> <span class="nn">functools</span>
92 <span class="kn">import</span> <span class="nn">logging</span>
93 <span class="kn">import</span> <span class="nn">os</span>
94 <span class="kn">import</span> <span class="nn">pkgutil</span>
95 <span class="kn">import</span> <span class="nn">sys</span>
96 <span class="kn">import</span> <span class="nn">threading</span>
97 <span class="kn">import</span> <span class="nn">weakref</span>
99 <div class="viewcode-block" id="ResourceAction"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceAction">[docs]</a><span class="k">class</span> <span class="nc">ResourceAction</span><span class="p">:</span>
100 <span class="sd">""" Action that a user can order to a Resource Manager</span>
101 <span class="sd"> </span>
102 <span class="sd"> """</span>
103 <span class="n">DEPLOY</span> <span class="o">=</span> <span class="mi">0</span>
104 <span class="n">START</span> <span class="o">=</span> <span class="mi">1</span>
105 <span class="n">STOP</span> <span class="o">=</span> <span class="mi">2</span>
107 <div class="viewcode-block" id="ResourceState"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceState">[docs]</a><span class="k">class</span> <span class="nc">ResourceState</span><span class="p">:</span>
108 <span class="sd">""" State of a Resource Manager</span>
109 <span class="sd"> </span>
110 <span class="sd"> """</span>
111 <span class="n">NEW</span> <span class="o">=</span> <span class="mi">0</span>
112 <span class="n">DISCOVERED</span> <span class="o">=</span> <span class="mi">1</span>
113 <span class="n">RESERVED</span> <span class="o">=</span> <span class="mi">2</span>
114 <span class="n">PROVISIONED</span> <span class="o">=</span> <span class="mi">3</span>
115 <span class="n">READY</span> <span class="o">=</span> <span class="mi">4</span>
116 <span class="n">STARTED</span> <span class="o">=</span> <span class="mi">5</span>
117 <span class="n">STOPPED</span> <span class="o">=</span> <span class="mi">6</span>
118 <span class="n">FAILED</span> <span class="o">=</span> <span class="mi">7</span>
119 <span class="n">RELEASED</span> <span class="o">=</span> <span class="mi">8</span>
121 <span class="n">ResourceState2str</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">({</span>
122 <span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span> <span class="p">:</span> <span class="s">"NEW"</span><span class="p">,</span>
123 <span class="n">ResourceState</span><span class="o">.</span><span class="n">DISCOVERED</span> <span class="p">:</span> <span class="s">"DISCOVERED"</span><span class="p">,</span>
124 <span class="n">ResourceState</span><span class="o">.</span><span class="n">RESERVED</span> <span class="p">:</span> <span class="s">"RESERVED"</span><span class="p">,</span>
125 <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span> <span class="p">:</span> <span class="s">"PROVISIONED"</span><span class="p">,</span>
126 <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span> <span class="p">:</span> <span class="s">"READY"</span><span class="p">,</span>
127 <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span> <span class="p">:</span> <span class="s">"STARTED"</span><span class="p">,</span>
128 <span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span> <span class="p">:</span> <span class="s">"STOPPED"</span><span class="p">,</span>
129 <span class="n">ResourceState</span><span class="o">.</span><span class="n">FAILED</span> <span class="p">:</span> <span class="s">"FAILED"</span><span class="p">,</span>
130 <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span> <span class="p">:</span> <span class="s">"RELEASED"</span><span class="p">,</span>
131 <span class="p">})</span>
133 <div class="viewcode-block" id="clsinit"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.clsinit">[docs]</a><span class="k">def</span> <span class="nf">clsinit</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
134 <span class="sd">""" Initializes template information (i.e. attributes and traces)</span>
135 <span class="sd"> on classes derived from the ResourceManager class.</span>
137 <span class="sd"> It is used as a decorator in the class declaration as follows:</span>
139 <span class="sd"> @clsinit</span>
140 <span class="sd"> class MyResourceManager(ResourceManager):</span>
141 <span class="sd"> </span>
142 <span class="sd"> ...</span>
144 <span class="sd"> """</span>
146 <span class="n">cls</span><span class="o">.</span><span class="n">_clsinit</span><span class="p">()</span>
147 <span class="k">return</span> <span class="n">cls</span>
149 <div class="viewcode-block" id="clsinit_copy"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.clsinit_copy">[docs]</a><span class="k">def</span> <span class="nf">clsinit_copy</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
150 <span class="sd">""" Initializes template information (i.e. attributes and traces)</span>
151 <span class="sd"> on classes derived from the ResourceManager class.</span>
152 <span class="sd"> It differs from the clsinit method in that it forces inheritance</span>
153 <span class="sd"> of attributes and traces from the parent class.</span>
155 <span class="sd"> It is used as a decorator in the class declaration as follows:</span>
157 <span class="sd"> @clsinit</span>
158 <span class="sd"> class MyResourceManager(ResourceManager):</span>
159 <span class="sd"> </span>
160 <span class="sd"> ...</span>
163 <span class="sd"> clsinit_copy should be prefered to clsinit when creating new</span>
164 <span class="sd"> ResourceManager child classes.</span>
166 <span class="sd"> """</span>
168 <span class="n">cls</span><span class="o">.</span><span class="n">_clsinit_copy</span><span class="p">()</span>
169 <span class="k">return</span> <span class="n">cls</span>
171 <div class="viewcode-block" id="failtrap"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.failtrap">[docs]</a><span class="k">def</span> <span class="nf">failtrap</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
172 <span class="sd">""" Decorator function for instance methods that should set the </span>
173 <span class="sd"> RM state to FAILED when an error is raised. The methods that must be</span>
174 <span class="sd"> decorated are: discover, reserved, provision, deploy, start, stop.</span>
176 <span class="sd"> """</span>
177 <span class="k">def</span> <span class="nf">wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
178 <span class="k">try</span><span class="p">:</span>
179 <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
180 <span class="k">except</span><span class="p">:</span>
181 <span class="bp">self</span><span class="o">.</span><span class="n">fail</span><span class="p">()</span>
183 <span class="kn">import</span> <span class="nn">traceback</span>
184 <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
185 <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">)</span>
186 <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
187 <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">"SETTING guid </span><span class="si">%d</span><span class="s"> to state FAILED"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
188 <span class="k">raise</span>
190 <span class="k">return</span> <span class="n">wrapped</span>
192 <span class="nd">@clsinit</span>
193 <div class="viewcode-block" id="ResourceManager"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager">[docs]</a><span class="k">class</span> <span class="nc">ResourceManager</span><span class="p">(</span><span class="n">Logger</span><span class="p">):</span>
194 <span class="sd">""" Base clase for all ResourceManagers. </span>
195 <span class="sd"> </span>
196 <span class="sd"> A ResourceManger is specific to a resource type (e.g. Node, </span>
197 <span class="sd"> Switch, Application, etc) on a specific platform (e.g. PlanetLab, </span>
198 <span class="sd"> OMF, etc).</span>
200 <span class="sd"> The ResourceManager instances are responsible for interacting with</span>
201 <span class="sd"> and controlling concrete (physical or virtual) resources in the </span>
202 <span class="sd"> experimental platforms.</span>
203 <span class="sd"> </span>
204 <span class="sd"> """</span>
205 <span class="n">_rtype</span> <span class="o">=</span> <span class="s">"Resource"</span>
206 <span class="n">_attributes</span> <span class="o">=</span> <span class="bp">None</span>
207 <span class="n">_traces</span> <span class="o">=</span> <span class="bp">None</span>
208 <span class="n">_help</span> <span class="o">=</span> <span class="bp">None</span>
209 <span class="n">_platform</span> <span class="o">=</span> <span class="bp">None</span>
210 <span class="n">_reschedule_delay</span> <span class="o">=</span> <span class="s">"0.5s"</span>
212 <span class="nd">@classmethod</span>
213 <span class="k">def</span> <span class="nf">_register_attribute</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
214 <span class="sd">""" Resource subclasses will invoke this method to add a </span>
215 <span class="sd"> resource attribute</span>
217 <span class="sd"> """</span>
219 <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">attr</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr</span>
221 <span class="nd">@classmethod</span>
222 <span class="k">def</span> <span class="nf">_remove_attribute</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
223 <span class="sd">""" Resource subclasses will invoke this method to remove a </span>
224 <span class="sd"> resource attribute</span>
226 <span class="sd"> """</span>
228 <span class="k">del</span> <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
230 <span class="nd">@classmethod</span>
231 <span class="k">def</span> <span class="nf">_register_trace</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">trace</span><span class="p">):</span>
232 <span class="sd">""" Resource subclasses will invoke this method to add a </span>
233 <span class="sd"> resource trace</span>
235 <span class="sd"> """</span>
237 <span class="n">cls</span><span class="o">.</span><span class="n">_traces</span><span class="p">[</span><span class="n">trace</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">trace</span>
239 <span class="nd">@classmethod</span>
240 <span class="k">def</span> <span class="nf">_remove_trace</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
241 <span class="sd">""" Resource subclasses will invoke this method to remove a </span>
242 <span class="sd"> resource trace</span>
244 <span class="sd"> """</span>
246 <span class="k">del</span> <span class="n">cls</span><span class="o">.</span><span class="n">_traces</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
248 <span class="nd">@classmethod</span>
249 <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
250 <span class="sd">""" Resource subclasses will invoke this method to register</span>
251 <span class="sd"> resource attributes.</span>
253 <span class="sd"> This method should be overriden in the RMs that define</span>
254 <span class="sd"> attributes.</span>
256 <span class="sd"> """</span>
257 <span class="n">critical</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">"critical"</span><span class="p">,</span>
258 <span class="s">"Defines whether the resource is critical. "</span>
259 <span class="s">"A failure on a critical resource will interrupt "</span>
260 <span class="s">"the experiment. "</span><span class="p">,</span>
261 <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
262 <span class="n">default</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
263 <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
264 <span class="n">hard_release</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">"hardRelease"</span><span class="p">,</span>
265 <span class="s">"Forces removal of all result files and directories associated "</span>
266 <span class="s">"to the RM upon resource release. After release the RM will "</span>
267 <span class="s">"be removed from the EC and the results will not longer be "</span>
268 <span class="s">"accessible"</span><span class="p">,</span>
269 <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
270 <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
271 <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
273 <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">critical</span><span class="p">)</span>
274 <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">hard_release</span><span class="p">)</span>
276 <span class="nd">@classmethod</span>
277 <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
278 <span class="sd">""" Resource subclasses will invoke this method to register</span>
279 <span class="sd"> resource traces</span>
281 <span class="sd"> This method should be overridden in the RMs that define traces.</span>
282 <span class="sd"> </span>
283 <span class="sd"> """</span>
285 <span class="k">pass</span>
287 <span class="nd">@classmethod</span>
288 <span class="k">def</span> <span class="nf">_clsinit</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
289 <span class="sd">""" ResourceManager classes have different attributes and traces.</span>
290 <span class="sd"> Attribute and traces are stored in 'class attribute' dictionaries.</span>
291 <span class="sd"> When a new ResourceManager class is created, the _clsinit method is </span>
292 <span class="sd"> called to create a new instance of those dictionaries and initialize </span>
293 <span class="sd"> them.</span>
294 <span class="sd"> </span>
295 <span class="sd"> The _clsinit method is called by the clsinit decorator method.</span>
296 <span class="sd"> </span>
297 <span class="sd"> """</span>
299 <span class="c"># static template for resource attributes</span>
300 <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
301 <span class="n">cls</span><span class="o">.</span><span class="n">_register_attributes</span><span class="p">()</span>
303 <span class="c"># static template for resource traces</span>
304 <span class="n">cls</span><span class="o">.</span><span class="n">_traces</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
305 <span class="n">cls</span><span class="o">.</span><span class="n">_register_traces</span><span class="p">()</span>
307 <span class="nd">@classmethod</span>
308 <span class="k">def</span> <span class="nf">_clsinit_copy</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
309 <span class="sd">""" Same as _clsinit, except that after creating new instances of the</span>
310 <span class="sd"> dictionaries it copies all the attributes and traces from the parent </span>
311 <span class="sd"> class.</span>
312 <span class="sd"> </span>
313 <span class="sd"> The _clsinit_copy method is called by the clsinit_copy decorator method.</span>
314 <span class="sd"> </span>
315 <span class="sd"> """</span>
316 <span class="c"># static template for resource attributes</span>
317 <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">)</span>
318 <span class="n">cls</span><span class="o">.</span><span class="n">_register_attributes</span><span class="p">()</span>
320 <span class="c"># static template for resource traces</span>
321 <span class="n">cls</span><span class="o">.</span><span class="n">_traces</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_traces</span><span class="p">)</span>
322 <span class="n">cls</span><span class="o">.</span><span class="n">_register_traces</span><span class="p">()</span>
324 <span class="nd">@classmethod</span>
325 <div class="viewcode-block" id="ResourceManager.get_rtype"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_rtype">[docs]</a> <span class="k">def</span> <span class="nf">get_rtype</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
326 <span class="sd">""" Returns the type of the Resource Manager</span>
328 <span class="sd"> """</span>
329 <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_rtype</span>
331 <span class="nd">@classmethod</span>
332 <div class="viewcode-block" id="ResourceManager.get_attributes"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_attributes">[docs]</a> <span class="k">def</span> <span class="nf">get_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
333 <span class="sd">""" Returns a copy of the attributes</span>
335 <span class="sd"> """</span>
336 <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
338 <span class="nd">@classmethod</span>
339 <div class="viewcode-block" id="ResourceManager.get_attribute"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_attribute">[docs]</a> <span class="k">def</span> <span class="nf">get_attribute</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
340 <span class="sd">""" Returns a copy of the attribute with name 'name'</span>
342 <span class="sd"> """</span>
343 <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">name</span><span class="p">])</span>
345 <span class="nd">@classmethod</span>
346 <div class="viewcode-block" id="ResourceManager.get_traces"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_traces">[docs]</a> <span class="k">def</span> <span class="nf">get_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
347 <span class="sd">""" Returns a copy of the traces</span>
349 <span class="sd"> """</span>
350 <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_traces</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
352 <span class="nd">@classmethod</span>
353 <div class="viewcode-block" id="ResourceManager.get_help"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_help">[docs]</a> <span class="k">def</span> <span class="nf">get_help</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
354 <span class="sd">""" Returns the description of the type of Resource</span>
356 <span class="sd"> """</span>
357 <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_help</span>
359 <span class="nd">@classmethod</span>
360 <div class="viewcode-block" id="ResourceManager.get_platform"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_platform">[docs]</a> <span class="k">def</span> <span class="nf">get_platform</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
361 <span class="sd">""" Returns the identified of the platform (i.e. testbed type)</span>
362 <span class="sd"> for the Resource</span>
364 <span class="sd"> """</span>
365 <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_platform</span>
367 <span class="nd">@classmethod</span>
368 <div class="viewcode-block" id="ResourceManager.get_global"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_global">[docs]</a> <span class="k">def</span> <span class="nf">get_global</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
369 <span class="sd">""" Returns the value of a global attribute</span>
370 <span class="sd"> Global attribute meaning an attribute for </span>
371 <span class="sd"> all the resources from a rtype</span>
373 <span class="sd"> :param name: Name of the attribute</span>
374 <span class="sd"> :type name: str</span>
375 <span class="sd"> :rtype: str</span>
376 <span class="sd"> """</span>
377 <span class="n">global_attr</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
378 <span class="k">return</span> <span class="n">global_attr</span><span class="o">.</span><span class="n">value</span>
380 <span class="nd">@classmethod</span>
381 <div class="viewcode-block" id="ResourceManager.set_global"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_global">[docs]</a> <span class="k">def</span> <span class="nf">set_global</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
382 <span class="sd">""" Set value for a global attribute</span>
384 <span class="sd"> :param name: Name of the attribute</span>
385 <span class="sd"> :type name: str</span>
386 <span class="sd"> :param name: Value of the attribute</span>
387 <span class="sd"> :type name: str</span>
388 <span class="sd"> """</span>
389 <span class="n">global_attr</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
390 <span class="n">global_attr</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">value</span>
391 <span class="k">return</span> <span class="n">value</span>
393 <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
394 <span class="nb">super</span><span class="p">(</span><span class="n">ResourceManager</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
396 <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span> <span class="o">=</span> <span class="n">guid</span>
397 <span class="bp">self</span><span class="o">.</span><span class="n">_ec</span> <span class="o">=</span> <span class="n">weakref</span><span class="o">.</span><span class="n">ref</span><span class="p">(</span><span class="n">ec</span><span class="p">)</span>
398 <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
399 <span class="bp">self</span><span class="o">.</span><span class="n">_conditions</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
401 <span class="c"># the resource instance gets a copy of all attributes</span>
402 <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_attributes</span><span class="p">)</span>
404 <span class="c"># the resource instance gets a copy of all traces</span>
405 <span class="bp">self</span><span class="o">.</span><span class="n">_trcs</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_traces</span><span class="p">)</span>
407 <span class="c"># Each resource is placed on a deployment group by the EC</span>
408 <span class="c"># during deployment</span>
409 <span class="bp">self</span><span class="o">.</span><span class="n">deployment_group</span> <span class="o">=</span> <span class="bp">None</span>
411 <span class="bp">self</span><span class="o">.</span><span class="n">_start_time</span> <span class="o">=</span> <span class="bp">None</span>
412 <span class="bp">self</span><span class="o">.</span><span class="n">_stop_time</span> <span class="o">=</span> <span class="bp">None</span>
413 <span class="bp">self</span><span class="o">.</span><span class="n">_discover_time</span> <span class="o">=</span> <span class="bp">None</span>
414 <span class="bp">self</span><span class="o">.</span><span class="n">_reserved_time</span> <span class="o">=</span> <span class="bp">None</span>
415 <span class="bp">self</span><span class="o">.</span><span class="n">_provision_time</span> <span class="o">=</span> <span class="bp">None</span>
416 <span class="bp">self</span><span class="o">.</span><span class="n">_ready_time</span> <span class="o">=</span> <span class="bp">None</span>
417 <span class="bp">self</span><span class="o">.</span><span class="n">_release_time</span> <span class="o">=</span> <span class="bp">None</span>
418 <span class="bp">self</span><span class="o">.</span><span class="n">_failed_time</span> <span class="o">=</span> <span class="bp">None</span>
420 <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span>
422 <span class="c"># instance lock to synchronize exclusive state change methods (such</span>
423 <span class="c"># as deploy and release methods), in order to prevent them from being </span>
424 <span class="c"># executed at the same time and corrupt internal resource state</span>
425 <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
427 <span class="nd">@property</span>
428 <div class="viewcode-block" id="ResourceManager.guid"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.guid">[docs]</a> <span class="k">def</span> <span class="nf">guid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
429 <span class="sd">""" Returns the global unique identifier of the RM """</span>
430 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span>
432 <span class="nd">@property</span>
433 <div class="viewcode-block" id="ResourceManager.ec"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.ec">[docs]</a> <span class="k">def</span> <span class="nf">ec</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
434 <span class="sd">""" Returns the Experiment Controller of the RM """</span>
435 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ec</span><span class="p">()</span>
437 <span class="nd">@property</span>
438 <div class="viewcode-block" id="ResourceManager.connections"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.connections">[docs]</a> <span class="k">def</span> <span class="nf">connections</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
439 <span class="sd">""" Returns the set of guids of connected RMs """</span>
440 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span>
442 <span class="nd">@property</span>
443 <div class="viewcode-block" id="ResourceManager.conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.conditions">[docs]</a> <span class="k">def</span> <span class="nf">conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
444 <span class="sd">""" Returns the conditions to which the RM is subjected to.</span>
445 <span class="sd"> </span>
446 <span class="sd"> This method returns a dictionary of conditions lists indexed by</span>
447 <span class="sd"> a ResourceAction.</span>
448 <span class="sd"> </span>
449 <span class="sd"> """</span>
450 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conditions</span>
452 <span class="nd">@property</span>
453 <div class="viewcode-block" id="ResourceManager.start_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.start_time">[docs]</a> <span class="k">def</span> <span class="nf">start_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
454 <span class="sd">""" Returns the start time of the RM as a timestamp """</span>
455 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_time</span>
457 <span class="nd">@property</span>
458 <div class="viewcode-block" id="ResourceManager.stop_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.stop_time">[docs]</a> <span class="k">def</span> <span class="nf">stop_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
459 <span class="sd">""" Returns the stop time of the RM as a timestamp """</span>
460 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stop_time</span>
462 <span class="nd">@property</span>
463 <div class="viewcode-block" id="ResourceManager.discover_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.discover_time">[docs]</a> <span class="k">def</span> <span class="nf">discover_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
464 <span class="sd">""" Returns the discover time of the RM as a timestamp """</span>
465 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_discover_time</span>
467 <span class="nd">@property</span>
468 <div class="viewcode-block" id="ResourceManager.reserved_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.reserved_time">[docs]</a> <span class="k">def</span> <span class="nf">reserved_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
469 <span class="sd">""" Returns the reserved time of the RM as a timestamp """</span>
470 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reserved_time</span>
472 <span class="nd">@property</span>
473 <div class="viewcode-block" id="ResourceManager.provision_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.provision_time">[docs]</a> <span class="k">def</span> <span class="nf">provision_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
474 <span class="sd">""" Returns the provision time of the RM as a timestamp """</span>
475 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_provision_time</span>
477 <span class="nd">@property</span>
478 <div class="viewcode-block" id="ResourceManager.ready_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.ready_time">[docs]</a> <span class="k">def</span> <span class="nf">ready_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
479 <span class="sd">""" Returns the deployment time of the RM as a timestamp """</span>
480 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ready_time</span>
482 <span class="nd">@property</span>
483 <div class="viewcode-block" id="ResourceManager.release_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.release_time">[docs]</a> <span class="k">def</span> <span class="nf">release_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
484 <span class="sd">""" Returns the release time of the RM as a timestamp """</span>
485 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_time</span>
487 <span class="nd">@property</span>
488 <div class="viewcode-block" id="ResourceManager.failed_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.failed_time">[docs]</a> <span class="k">def</span> <span class="nf">failed_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
489 <span class="sd">""" Returns the time failure occurred for the RM as a timestamp """</span>
490 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_failed_time</span>
492 <span class="nd">@property</span>
493 <div class="viewcode-block" id="ResourceManager.state"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.state">[docs]</a> <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
494 <span class="sd">""" Get the current state of the RM """</span>
495 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
497 <span class="nd">@property</span>
498 <div class="viewcode-block" id="ResourceManager.reschedule_delay"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.reschedule_delay">[docs]</a> <span class="k">def</span> <span class="nf">reschedule_delay</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
499 <span class="sd">""" Returns default reschedule delay """</span>
500 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reschedule_delay</span>
502 <div class="viewcode-block" id="ResourceManager.log_message"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.log_message">[docs]</a> <span class="k">def</span> <span class="nf">log_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
503 <span class="sd">""" Returns the log message formatted with added information.</span>
505 <span class="sd"> :param msg: text message</span>
506 <span class="sd"> :type msg: str</span>
507 <span class="sd"> :rtype: str</span>
509 <span class="sd"> """</span>
510 <span class="k">return</span> <span class="s">" </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> - </span><span class="si">%s</span><span class="s"> "</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
512 <div class="viewcode-block" id="ResourceManager.register_connection"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.register_connection">[docs]</a> <span class="k">def</span> <span class="nf">register_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
513 <span class="sd">""" Registers a connection to the RM identified by guid</span>
515 <span class="sd"> This method should not be overridden. Specific functionality</span>
516 <span class="sd"> should be added in the do_connect method.</span>
518 <span class="sd"> :param guid: Global unique identified of the RM to connect to</span>
519 <span class="sd"> :type guid: int</span>
521 <span class="sd"> """</span>
522 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">valid_connection</span><span class="p">(</span><span class="n">guid</span><span class="p">):</span>
523 <span class="bp">self</span><span class="o">.</span><span class="n">do_connect</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
524 <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
526 <div class="viewcode-block" id="ResourceManager.unregister_connection"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.unregister_connection">[docs]</a> <span class="k">def</span> <span class="nf">unregister_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
527 <span class="sd">""" Removes a registered connection to the RM identified by guid</span>
528 <span class="sd"> </span>
529 <span class="sd"> This method should not be overridden. Specific functionality</span>
530 <span class="sd"> should be added in the do_disconnect method.</span>
532 <span class="sd"> :param guid: Global unique identified of the RM to connect to</span>
533 <span class="sd"> :type guid: int</span>
535 <span class="sd"> """</span>
536 <span class="k">if</span> <span class="n">guid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span><span class="p">:</span>
537 <span class="bp">self</span><span class="o">.</span><span class="n">do_disconnect</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
538 <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
540 <span class="nd">@failtrap</span>
541 <div class="viewcode-block" id="ResourceManager.discover"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.discover">[docs]</a> <span class="k">def</span> <span class="nf">discover</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
542 <span class="sd">""" Performs resource discovery.</span>
543 <span class="sd"> </span>
544 <span class="sd"> This method is responsible for selecting an individual resource</span>
545 <span class="sd"> matching user requirements.</span>
547 <span class="sd"> This method should not be overridden directly. Specific functionality</span>
548 <span class="sd"> should be added in the do_discover method.</span>
550 <span class="sd"> """</span>
551 <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
552 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
553 <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
555 <span class="nd">@failtrap</span>
556 <div class="viewcode-block" id="ResourceManager.reserve"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.reserve">[docs]</a> <span class="k">def</span> <span class="nf">reserve</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
557 <span class="sd">""" Performs resource reserve.</span>
558 <span class="sd"> </span>
559 <span class="sd"> This method is responsible for reserving an individual resource</span>
560 <span class="sd"> matching user requirements.</span>
562 <span class="sd"> This method should not be overridden directly. Specific functionality</span>
563 <span class="sd"> should be added in the do_reserved method.</span>
565 <span class="sd"> """</span>
566 <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
567 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
568 <span class="bp">self</span><span class="o">.</span><span class="n">do_reserve</span><span class="p">()</span>
570 <span class="nd">@failtrap</span>
571 <div class="viewcode-block" id="ResourceManager.provision"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.provision">[docs]</a> <span class="k">def</span> <span class="nf">provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
572 <span class="sd">""" Performs resource provisioning.</span>
574 <span class="sd"> This method is responsible for provisioning one resource.</span>
575 <span class="sd"> After this method has been successfully invoked, the resource</span>
576 <span class="sd"> should be accessible/controllable by the RM.</span>
578 <span class="sd"> This method should not be overridden directly. Specific functionality</span>
579 <span class="sd"> should be added in the do_provision method.</span>
581 <span class="sd"> """</span>
582 <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
583 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
584 <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
586 <span class="nd">@failtrap</span>
587 <div class="viewcode-block" id="ResourceManager.configure"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.configure">[docs]</a> <span class="k">def</span> <span class="nf">configure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
588 <span class="sd">""" Performs resource configuration.</span>
590 <span class="sd"> This method is responsible for configuring one resource.</span>
591 <span class="sd"> After this method has been successfully invoked, the resource</span>
592 <span class="sd"> should be set up to start the experimentation.</span>
594 <span class="sd"> This method should not be overridden directly. Specific functionality</span>
595 <span class="sd"> should be added in the do_configure method.</span>
597 <span class="sd"> """</span>
598 <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
599 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
600 <span class="bp">self</span><span class="o">.</span><span class="n">do_configure</span><span class="p">()</span>
602 <span class="nd">@failtrap</span>
603 <div class="viewcode-block" id="ResourceManager.start"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.start">[docs]</a> <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
604 <span class="sd">""" Starts the RM (e.g. launch remote process).</span>
605 <span class="sd"> </span>
606 <span class="sd"> There is no standard start behavior. Some RMs will not need to perform</span>
607 <span class="sd"> any actions upon start.</span>
609 <span class="sd"> This method should not be overridden directly. Specific functionality</span>
610 <span class="sd"> should be added in the do_start method.</span>
612 <span class="sd"> """</span>
614 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">]:</span>
615 <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">"Wrong state </span><span class="si">%s</span><span class="s"> for start"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
616 <span class="k">return</span>
618 <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
619 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
620 <span class="bp">self</span><span class="o">.</span><span class="n">do_start</span><span class="p">()</span>
622 <span class="nd">@failtrap</span>
623 <div class="viewcode-block" id="ResourceManager.stop"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.stop">[docs]</a> <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
624 <span class="sd">""" Interrupts the RM, stopping any tasks the RM was performing.</span>
625 <span class="sd"> </span>
626 <span class="sd"> There is no standard stop behavior. Some RMs will not need to perform</span>
627 <span class="sd"> any actions upon stop.</span>
628 <span class="sd"> </span>
629 <span class="sd"> This method should not be overridden directly. Specific functionality</span>
630 <span class="sd"> should be added in the do_stop method.</span>
631 <span class="sd"> </span>
632 <span class="sd"> """</span>
633 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">]:</span>
634 <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">"Wrong state </span><span class="si">%s</span><span class="s"> for stop"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
635 <span class="k">return</span>
637 <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
638 <span class="bp">self</span><span class="o">.</span><span class="n">do_stop</span><span class="p">()</span>
640 <span class="nd">@failtrap</span>
641 <div class="viewcode-block" id="ResourceManager.deploy"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.deploy">[docs]</a> <span class="k">def</span> <span class="nf">deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
642 <span class="sd">""" Execute all steps required for the RM to reach the state READY.</span>
644 <span class="sd"> This method is responsible for deploying the resource (and invoking </span>
645 <span class="sd"> the discover and provision methods).</span>
646 <span class="sd"> </span>
647 <span class="sd"> This method should not be overridden directly. Specific functionality</span>
648 <span class="sd"> should be added in the do_deploy method.</span>
649 <span class="sd"> </span>
650 <span class="sd"> """</span>
651 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">></span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
652 <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">"Wrong state </span><span class="si">%s</span><span class="s"> for deploy"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
653 <span class="k">return</span>
655 <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
656 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
657 <span class="bp">self</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
659 <div class="viewcode-block" id="ResourceManager.release"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.release">[docs]</a> <span class="k">def</span> <span class="nf">release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
660 <span class="sd">""" Perform actions to free resources used by the RM.</span>
661 <span class="sd"> </span>
662 <span class="sd"> This method is responsible for releasing resources that were</span>
663 <span class="sd"> used during the experiment by the RM.</span>
665 <span class="sd"> This method should not be overridden directly. Specific functionality</span>
666 <span class="sd"> should be added in the do_release method.</span>
667 <span class="sd"> </span>
668 <span class="sd"> """</span>
669 <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
670 <span class="k">try</span><span class="p">:</span>
671 <span class="bp">self</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
672 <span class="k">except</span><span class="p">:</span>
673 <span class="bp">self</span><span class="o">.</span><span class="n">set_released</span><span class="p">()</span>
675 <span class="kn">import</span> <span class="nn">traceback</span>
676 <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
677 <span class="n">msg</span> <span class="o">=</span> <span class="s">" </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> ----- FAILED TO RELEASE ----- </span><span class="se">\n</span><span class="s"> </span><span class="si">%s</span><span class="s"> "</span> <span class="o">%</span> <span class="p">(</span>
678 <span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
679 <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">)</span>
680 <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
682 <div class="viewcode-block" id="ResourceManager.fail"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.fail">[docs]</a> <span class="k">def</span> <span class="nf">fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
683 <span class="sd">""" Sets the RM to state FAILED.</span>
685 <span class="sd"> This method should not be overridden directly. Specific functionality</span>
686 <span class="sd"> should be added in the do_fail method.</span>
688 <span class="sd"> """</span>
689 <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
690 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
691 <span class="bp">self</span><span class="o">.</span><span class="n">do_fail</span><span class="p">()</span>
693 <div class="viewcode-block" id="ResourceManager.set"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set">[docs]</a> <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
694 <span class="sd">""" Set the value of the attribute</span>
696 <span class="sd"> :param name: Name of the attribute</span>
697 <span class="sd"> :type name: str</span>
698 <span class="sd"> :param name: Value of the attribute</span>
699 <span class="sd"> :type name: str</span>
700 <span class="sd"> """</span>
701 <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
702 <span class="n">attr</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">value</span>
703 <span class="k">return</span> <span class="n">value</span>
705 <div class="viewcode-block" id="ResourceManager.get"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get">[docs]</a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
706 <span class="sd">""" Returns the value of the attribute</span>
708 <span class="sd"> :param name: Name of the attribute</span>
709 <span class="sd"> :type name: str</span>
710 <span class="sd"> :rtype: str</span>
711 <span class="sd"> """</span>
712 <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
714 <span class="sd">"""</span>
715 <span class="sd"> A.Q. Commenting due to performance impact</span>
716 <span class="sd"> if attr.has_flag(Flags.Global):</span>
717 <span class="sd"> self.warning( "Attribute %s is global. Use get_global instead." % name)</span>
718 <span class="sd"> """</span>
720 <span class="k">return</span> <span class="n">attr</span><span class="o">.</span><span class="n">value</span>
722 <div class="viewcode-block" id="ResourceManager.has_changed"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.has_changed">[docs]</a> <span class="k">def</span> <span class="nf">has_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
723 <span class="sd">""" Returns the True is the value of the attribute</span>
724 <span class="sd"> has been modified by the user.</span>
726 <span class="sd"> :param name: Name of the attribute</span>
727 <span class="sd"> :type name: str</span>
728 <span class="sd"> :rtype: str</span>
729 <span class="sd"> """</span>
730 <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
731 <span class="k">return</span> <span class="n">attr</span><span class="o">.</span><span class="n">has_changed</span>
733 <div class="viewcode-block" id="ResourceManager.has_flag"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.has_flag">[docs]</a> <span class="k">def</span> <span class="nf">has_flag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">flag</span><span class="p">):</span>
734 <span class="sd">""" Returns true if the attribute has the flag 'flag'</span>
736 <span class="sd"> :param flag: Flag to be checked</span>
737 <span class="sd"> :type flag: Flags</span>
738 <span class="sd"> """</span>
739 <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
740 <span class="k">return</span> <span class="n">attr</span><span class="o">.</span><span class="n">has_flag</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span>
742 <div class="viewcode-block" id="ResourceManager.has_attribute"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.has_attribute">[docs]</a> <span class="k">def</span> <span class="nf">has_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
743 <span class="sd">""" Returns true if the RM has an attribute with name</span>
745 <span class="sd"> :param name: name of the attribute</span>
746 <span class="sd"> :type name: string</span>
747 <span class="sd"> """</span>
748 <span class="k">return</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span>
750 <div class="viewcode-block" id="ResourceManager.enable_trace"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.enable_trace">[docs]</a> <span class="k">def</span> <span class="nf">enable_trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
751 <span class="sd">""" Explicitly enable trace generation</span>
753 <span class="sd"> :param name: Name of the trace</span>
754 <span class="sd"> :type name: str</span>
755 <span class="sd"> """</span>
756 <span class="n">trace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_trcs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
757 <span class="n">trace</span><span class="o">.</span><span class="n">enabled</span> <span class="o">=</span> <span class="bp">True</span>
759 <div class="viewcode-block" id="ResourceManager.trace_enabled"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.trace_enabled">[docs]</a> <span class="k">def</span> <span class="nf">trace_enabled</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
760 <span class="sd">"""Returns True if trace is enables </span>
762 <span class="sd"> :param name: Name of the trace</span>
763 <span class="sd"> :type name: str</span>
764 <span class="sd"> """</span>
765 <span class="n">trace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_trcs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
766 <span class="k">return</span> <span class="n">trace</span><span class="o">.</span><span class="n">enabled</span>
768 <div class="viewcode-block" id="ResourceManager.trace"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.trace">[docs]</a> <span class="k">def</span> <span class="nf">trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attr</span> <span class="o">=</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="n">block</span> <span class="o">=</span> <span class="mi">512</span><span class="p">,</span> <span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
769 <span class="sd">""" Get information on collected trace</span>
771 <span class="sd"> :param name: Name of the trace</span>
772 <span class="sd"> :type name: str</span>
774 <span class="sd"> :param attr: Can be one of:</span>
775 <span class="sd"> - TraceAttr.ALL (complete trace content), </span>
776 <span class="sd"> - TraceAttr.STREAM (block in bytes to read starting at offset), </span>
777 <span class="sd"> - TraceAttr.PATH (full path to the trace file),</span>
778 <span class="sd"> - TraceAttr.SIZE (size of trace file). </span>
779 <span class="sd"> :type attr: str</span>
781 <span class="sd"> :param block: Number of bytes to retrieve from trace, when attr is TraceAttr.STREAM </span>
782 <span class="sd"> :type name: int</span>
784 <span class="sd"> :param offset: Number of 'blocks' to skip, when attr is TraceAttr.STREAM </span>
785 <span class="sd"> :type name: int</span>
787 <span class="sd"> :rtype: str</span>
788 <span class="sd"> """</span>
789 <span class="k">pass</span>
791 <div class="viewcode-block" id="ResourceManager.register_condition"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.register_condition">[docs]</a> <span class="k">def</span> <span class="nf">register_condition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
792 <span class="sd">""" Registers a condition on the resource manager to allow execution </span>
793 <span class="sd"> of 'action' only after 'time' has elapsed from the moment all resources </span>
794 <span class="sd"> in 'group' reached state 'state'</span>
796 <span class="sd"> :param action: Action to restrict to condition (either 'START' or 'STOP')</span>
797 <span class="sd"> :type action: str</span>
798 <span class="sd"> :param group: Group of RMs to wait for (list of guids)</span>
799 <span class="sd"> :type group: int or list of int</span>
800 <span class="sd"> :param state: State to wait for on all RM in group. (either 'STARTED', 'STOPPED' or 'READY')</span>
801 <span class="sd"> :type state: str</span>
802 <span class="sd"> :param time: Time to wait after 'state' is reached on all RMs in group. (e.g. '2s')</span>
803 <span class="sd"> :type time: str</span>
805 <span class="sd"> """</span>
807 <span class="k">if</span> <span class="ow">not</span> <span class="n">action</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="p">:</span>
808 <span class="bp">self</span><span class="o">.</span><span class="n">_conditions</span><span class="p">[</span><span class="n">action</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
810 <span class="n">conditions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
812 <span class="c"># For each condition to register a tuple of (group, state, time) is </span>
813 <span class="c"># added to the 'action' list</span>
814 <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
815 <span class="n">group</span> <span class="o">=</span> <span class="p">[</span><span class="n">group</span><span class="p">]</span>
817 <span class="n">conditions</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">))</span>
819 <div class="viewcode-block" id="ResourceManager.unregister_condition"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.unregister_condition">[docs]</a> <span class="k">def</span> <span class="nf">unregister_condition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">action</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
820 <span class="sd">""" Removed conditions for a certain group of guids</span>
822 <span class="sd"> :param action: Action to restrict to condition (either 'START', 'STOP' or 'READY')</span>
823 <span class="sd"> :type action: str</span>
825 <span class="sd"> :param group: Group of RMs to wait for (list of guids)</span>
826 <span class="sd"> :type group: int or list of int</span>
828 <span class="sd"> """</span>
829 <span class="c"># For each condition a tuple of (group, state, time) is </span>
830 <span class="c"># added to the 'action' list</span>
831 <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
832 <span class="n">group</span> <span class="o">=</span> <span class="p">[</span><span class="n">group</span><span class="p">]</span>
834 <span class="k">for</span> <span class="n">act</span><span class="p">,</span> <span class="n">conditions</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
835 <span class="k">if</span> <span class="n">action</span> <span class="ow">and</span> <span class="n">act</span> <span class="o">!=</span> <span class="n">action</span><span class="p">:</span>
836 <span class="k">continue</span>
838 <span class="k">for</span> <span class="n">condition</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">conditions</span><span class="p">):</span>
839 <span class="p">(</span><span class="n">grp</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="o">=</span> <span class="n">condition</span>
841 <span class="c"># If there is an intersection between grp and group,</span>
842 <span class="c"># then remove intersected elements</span>
843 <span class="n">intsec</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">group</span><span class="p">)</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">grp</span><span class="p">))</span>
844 <span class="k">if</span> <span class="n">intsec</span><span class="p">:</span>
845 <span class="n">idx</span> <span class="o">=</span> <span class="n">conditions</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">condition</span><span class="p">)</span>
846 <span class="n">newgrp</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">grp</span><span class="p">)</span>
847 <span class="n">newgrp</span><span class="o">.</span><span class="n">difference_update</span><span class="p">(</span><span class="n">intsec</span><span class="p">)</span>
848 <span class="n">conditions</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">newgrp</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
850 <div class="viewcode-block" id="ResourceManager.get_connected"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_connected">[docs]</a> <span class="k">def</span> <span class="nf">get_connected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rtype</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
851 <span class="sd">""" Returns the list of RM with the type 'rtype'</span>
853 <span class="sd"> :param rtype: Type of the RM we look for</span>
854 <span class="sd"> :type rtype: str</span>
855 <span class="sd"> :return: list of guid</span>
856 <span class="sd"> """</span>
857 <span class="n">connected</span> <span class="o">=</span> <span class="p">[]</span>
858 <span class="n">rclass</span> <span class="o">=</span> <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">get_resource_type</span><span class="p">(</span><span class="n">rtype</span><span class="p">)</span>
859 <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connections</span><span class="p">:</span>
860 <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
861 <span class="k">if</span> <span class="ow">not</span> <span class="n">rtype</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">rm</span><span class="p">,</span> <span class="n">rclass</span><span class="p">):</span>
862 <span class="n">connected</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rm</span><span class="p">)</span>
863 <span class="k">return</span> <span class="n">connected</span>
865 <div class="viewcode-block" id="ResourceManager.is_rm_instance"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.is_rm_instance">[docs]</a> <span class="k">def</span> <span class="nf">is_rm_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rtype</span><span class="p">):</span>
866 <span class="sd">""" Returns True if the RM is instance of 'rtype'</span>
868 <span class="sd"> :param rtype: Type of the RM we look for</span>
869 <span class="sd"> :type rtype: str</span>
870 <span class="sd"> :return: True|False</span>
871 <span class="sd"> """</span>
872 <span class="n">rclass</span> <span class="o">=</span> <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">get_resource_type</span><span class="p">(</span><span class="n">rtype</span><span class="p">)</span>
873 <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rclass</span><span class="p">):</span>
874 <span class="k">return</span> <span class="bp">True</span>
875 <span class="k">return</span> <span class="bp">False</span>
877 <span class="nd">@failtrap</span>
878 <span class="k">def</span> <span class="nf">_needs_reschedule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span>
879 <span class="sd">""" Internal method that verify if 'time' has elapsed since </span>
880 <span class="sd"> all elements in 'group' have reached state 'state'.</span>
882 <span class="sd"> :param group: Group of RMs to wait for (list of guids)</span>
883 <span class="sd"> :type group: int or list of int</span>
884 <span class="sd"> :param state: State to wait for on all RM in group. (either 'STARTED', 'STOPPED' or 'READY')</span>
885 <span class="sd"> :type state: str</span>
886 <span class="sd"> :param time: Time to wait after 'state' is reached on all RMs in group. (e.g. '2s')</span>
887 <span class="sd"> :type time: str</span>
889 <span class="sd"> .. note : time should be written like "2s" or "3m" with s for seconds, m for minutes, h for hours, ...</span>
890 <span class="sd"> If for example, you need to wait 2min 30sec, time could be "150s" or "2.5m".</span>
891 <span class="sd"> For the moment, 2m30s is not a correct syntax.</span>
893 <span class="sd"> """</span>
894 <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
895 <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span>
897 <span class="c"># check state and time elapsed on all RMs</span>
898 <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="n">group</span><span class="p">:</span>
899 <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
901 <span class="c"># If one of the RMs this resource needs to wait for has FAILED</span>
902 <span class="c"># and is critical we raise an exception</span>
903 <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
904 <span class="k">if</span> <span class="ow">not</span> <span class="n">rm</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'critical'</span><span class="p">):</span>
905 <span class="k">continue</span>
906 <span class="n">msg</span> <span class="o">=</span> <span class="s">"Resource can not wait for FAILED RM </span><span class="si">%d</span><span class="s">. Setting Resource to FAILED"</span>
907 <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
909 <span class="c"># If the RM state is lower than the requested state we must</span>
910 <span class="c"># reschedule (e.g. if RM is READY but we required STARTED).</span>
911 <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o"><</span> <span class="n">state</span><span class="p">:</span>
912 <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
913 <span class="k">break</span>
915 <span class="c"># If there is a time restriction, we must verify the</span>
916 <span class="c"># restriction is satisfied </span>
917 <span class="k">if</span> <span class="n">time</span><span class="p">:</span>
918 <span class="k">if</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">DISCOVERED</span><span class="p">:</span>
919 <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">discover_time</span>
920 <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RESERVED</span><span class="p">:</span>
921 <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">reserved_time</span>
922 <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">:</span>
923 <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">provision_time</span>
924 <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
925 <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">ready_time</span>
926 <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
927 <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">start_time</span>
928 <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">:</span>
929 <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">stop_time</span>
930 <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
931 <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">release_time</span>
932 <span class="k">else</span><span class="p">:</span>
933 <span class="k">break</span>
935 <span class="c"># time already elapsed since RM changed state</span>
936 <span class="n">waited</span> <span class="o">=</span> <span class="s">"</span><span class="si">%f</span><span class="s">s"</span> <span class="o">%</span> <span class="n">tdiffsec</span><span class="p">(</span><span class="n">tnow</span><span class="p">(),</span> <span class="n">t</span><span class="p">)</span>
938 <span class="c"># time still to wait</span>
939 <span class="n">wait</span> <span class="o">=</span> <span class="n">tdiffsec</span><span class="p">(</span><span class="n">stabsformat</span><span class="p">(</span><span class="n">time</span><span class="p">),</span> <span class="n">stabsformat</span><span class="p">(</span><span class="n">waited</span><span class="p">))</span>
941 <span class="k">if</span> <span class="n">wait</span> <span class="o">></span> <span class="mf">0.001</span><span class="p">:</span>
942 <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
943 <span class="n">delay</span> <span class="o">=</span> <span class="s">"</span><span class="si">%f</span><span class="s">s"</span> <span class="o">%</span> <span class="n">wait</span>
944 <span class="k">break</span>
946 <span class="k">return</span> <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span>
948 <div class="viewcode-block" id="ResourceManager.set_with_conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_with_conditions">[docs]</a> <span class="k">def</span> <span class="nf">set_with_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span>
949 <span class="sd">""" Set value 'value' on attribute with name 'name' when 'time' </span>
950 <span class="sd"> has elapsed since all elements in 'group' have reached state</span>
951 <span class="sd"> 'state'</span>
953 <span class="sd"> :param name: Name of the attribute to set</span>
954 <span class="sd"> :type name: str</span>
955 <span class="sd"> :param name: Value of the attribute to set</span>
956 <span class="sd"> :type name: str</span>
957 <span class="sd"> :param group: Group of RMs to wait for (list of guids)</span>
958 <span class="sd"> :type group: int or list of int</span>
959 <span class="sd"> :param state: State to wait for on all RM in group. (either 'STARTED', 'STOPPED' or 'READY')</span>
960 <span class="sd"> :type state: str</span>
961 <span class="sd"> :param time: Time to wait after 'state' is reached on all RMs in group. (e.g. '2s')</span>
962 <span class="sd"> :type time: str</span>
963 <span class="sd"> """</span>
965 <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
966 <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span>
968 <span class="c">## evaluate if set conditions are met</span>
970 <span class="c"># only can set with conditions after the RM is started</span>
971 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
972 <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
973 <span class="k">else</span><span class="p">:</span>
974 <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_needs_reschedule</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
976 <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
977 <span class="n">callback</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">set_with_conditions</span><span class="p">,</span>
978 <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
979 <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">delay</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
980 <span class="k">else</span><span class="p">:</span>
981 <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
983 <div class="viewcode-block" id="ResourceManager.start_with_conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.start_with_conditions">[docs]</a> <span class="k">def</span> <span class="nf">start_with_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
984 <span class="sd">""" Starts RM when all the conditions in self.conditions for</span>
985 <span class="sd"> action 'START' are satisfied.</span>
987 <span class="sd"> """</span>
988 <span class="c">#import pdb;pdb.set_trace()</span>
990 <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
991 <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span>
994 <span class="c">## evaluate if conditions to start are met</span>
995 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">abort</span><span class="p">:</span>
996 <span class="k">return</span>
998 <span class="c"># Can only start when RM is either STOPPED or READY</span>
999 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">]:</span>
1000 <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
1001 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"---- RESCHEDULING START ---- state </span><span class="si">%s</span><span class="s"> "</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
1002 <span class="k">else</span><span class="p">:</span>
1003 <span class="n">start_conditions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">START</span><span class="p">,</span> <span class="p">[])</span>
1005 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"---- START CONDITIONS ---- </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="n">start_conditions</span><span class="p">)</span>
1007 <span class="c"># Verify all start conditions are met</span>
1008 <span class="k">for</span> <span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="ow">in</span> <span class="n">start_conditions</span><span class="p">:</span>
1009 <span class="c"># Uncomment for debug</span>
1010 <span class="c">#unmet = []</span>
1011 <span class="c">#for guid in group:</span>
1012 <span class="c"># rm = self.ec.get_resource(guid)</span>
1013 <span class="c"># unmet.append((guid, rm._state))</span>
1014 <span class="c">#</span>
1015 <span class="c">#self.debug("---- WAITED STATES ---- %s" % unmet )</span>
1017 <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_needs_reschedule</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1018 <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
1019 <span class="k">break</span>
1021 <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
1022 <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_with_conditions</span><span class="p">)</span>
1023 <span class="k">else</span><span class="p">:</span>
1024 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"----- STARTING ---- "</span><span class="p">)</span>
1025 <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
1027 <div class="viewcode-block" id="ResourceManager.stop_with_conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.stop_with_conditions">[docs]</a> <span class="k">def</span> <span class="nf">stop_with_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1028 <span class="sd">""" Stops RM when all the conditions in self.conditions for</span>
1029 <span class="sd"> action 'STOP' are satisfied.</span>
1031 <span class="sd"> """</span>
1032 <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
1033 <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span>
1035 <span class="c">## evaluate if conditions to stop are met</span>
1036 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">abort</span><span class="p">:</span>
1037 <span class="k">return</span>
1039 <span class="c"># only can stop when RM is STARTED</span>
1040 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
1041 <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
1042 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"---- RESCHEDULING STOP ---- state </span><span class="si">%s</span><span class="s"> "</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
1043 <span class="k">else</span><span class="p">:</span>
1044 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">" ---- STOP CONDITIONS ---- </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span>
1045 <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">STOP</span><span class="p">))</span>
1047 <span class="n">stop_conditions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">STOP</span><span class="p">,</span> <span class="p">[])</span>
1048 <span class="k">for</span> <span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="ow">in</span> <span class="n">stop_conditions</span><span class="p">:</span>
1049 <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_needs_reschedule</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1050 <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
1051 <span class="k">break</span>
1053 <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
1054 <span class="n">callback</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stop_with_conditions</span><span class="p">)</span>
1055 <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">delay</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
1056 <span class="k">else</span><span class="p">:</span>
1057 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">" ----- STOPPING ---- "</span><span class="p">)</span>
1058 <span class="bp">self</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
1060 <div class="viewcode-block" id="ResourceManager.deploy_with_conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.deploy_with_conditions">[docs]</a> <span class="k">def</span> <span class="nf">deploy_with_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1061 <span class="sd">""" Deploy RM when all the conditions in self.conditions for</span>
1062 <span class="sd"> action 'READY' are satisfied.</span>
1064 <span class="sd"> """</span>
1065 <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
1066 <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span>
1068 <span class="c">## evaluate if conditions to deploy are met</span>
1069 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">abort</span><span class="p">:</span>
1070 <span class="k">return</span>
1072 <span class="c"># only can deploy when RM is either NEW, DISCOVERED or PROVISIONED </span>
1073 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">DISCOVERED</span><span class="p">,</span>
1074 <span class="n">ResourceState</span><span class="o">.</span><span class="n">RESERVED</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">]:</span>
1075 <span class="c">#### XXX: A.Q. IT SHOULD FAIL IF DEPLOY IS CALLED IN OTHER STATES!</span>
1076 <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
1077 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"---- RESCHEDULING DEPLOY ---- state </span><span class="si">%s</span><span class="s"> "</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
1078 <span class="k">else</span><span class="p">:</span>
1079 <span class="n">deploy_conditions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">DEPLOY</span><span class="p">,</span> <span class="p">[])</span>
1081 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"---- DEPLOY CONDITIONS ---- </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="n">deploy_conditions</span><span class="p">)</span>
1083 <span class="c"># Verify all start conditions are met</span>
1084 <span class="k">for</span> <span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="ow">in</span> <span class="n">deploy_conditions</span><span class="p">:</span>
1085 <span class="c"># Uncomment for debug</span>
1086 <span class="c">#unmet = []</span>
1087 <span class="c">#for guid in group:</span>
1088 <span class="c"># rm = self.ec.get_resource(guid)</span>
1089 <span class="c"># unmet.append((guid, rm._state))</span>
1091 <span class="c">#self.debug("---- WAITED STATES ---- %s" % unmet )</span>
1093 <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_needs_reschedule</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1094 <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
1095 <span class="k">break</span>
1097 <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
1098 <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy_with_conditions</span><span class="p">)</span>
1099 <span class="k">else</span><span class="p">:</span>
1100 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"----- DEPLOYING ---- "</span><span class="p">)</span>
1101 <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">()</span>
1103 <div class="viewcode-block" id="ResourceManager.do_connect"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_connect">[docs]</a> <span class="k">def</span> <span class="nf">do_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
1104 <span class="sd">""" Performs actions that need to be taken upon associating RMs.</span>
1105 <span class="sd"> This method should be redefined when necessary in child classes.</span>
1106 <span class="sd"> """</span>
1107 <span class="k">pass</span>
1109 <div class="viewcode-block" id="ResourceManager.do_disconnect"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_disconnect">[docs]</a> <span class="k">def</span> <span class="nf">do_disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
1110 <span class="sd">""" Performs actions that need to be taken upon disassociating RMs.</span>
1111 <span class="sd"> This method should be redefined when necessary in child classes.</span>
1112 <span class="sd"> """</span>
1113 <span class="k">pass</span>
1115 <div class="viewcode-block" id="ResourceManager.valid_connection"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.valid_connection">[docs]</a> <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
1116 <span class="sd">"""Checks whether a connection with the other RM</span>
1117 <span class="sd"> is valid.</span>
1118 <span class="sd"> This method need to be redefined by each new Resource Manager.</span>
1120 <span class="sd"> :param guid: Guid of the current Resource Manager</span>
1121 <span class="sd"> :type guid: int</span>
1122 <span class="sd"> :rtype: Boolean</span>
1124 <span class="sd"> """</span>
1125 <span class="c"># TODO: Validate!</span>
1126 <span class="k">return</span> <span class="bp">True</span>
1128 <div class="viewcode-block" id="ResourceManager.do_discover"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_discover">[docs]</a> <span class="k">def</span> <span class="nf">do_discover</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1129 <span class="bp">self</span><span class="o">.</span><span class="n">set_discovered</span><span class="p">()</span>
1131 <div class="viewcode-block" id="ResourceManager.do_reserve"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_reserve">[docs]</a> <span class="k">def</span> <span class="nf">do_reserve</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1132 <span class="bp">self</span><span class="o">.</span><span class="n">set_reserved</span><span class="p">()</span>
1134 <div class="viewcode-block" id="ResourceManager.do_provision"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_provision">[docs]</a> <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1135 <span class="bp">self</span><span class="o">.</span><span class="n">set_provisioned</span><span class="p">()</span>
1137 <div class="viewcode-block" id="ResourceManager.do_configure"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_configure">[docs]</a> <span class="k">def</span> <span class="nf">do_configure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1138 <span class="k">pass</span>
1140 <div class="viewcode-block" id="ResourceManager.do_start"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_start">[docs]</a> <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1141 <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
1143 <div class="viewcode-block" id="ResourceManager.do_stop"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_stop">[docs]</a> <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1144 <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
1146 <div class="viewcode-block" id="ResourceManager.do_deploy"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_deploy">[docs]</a> <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1147 <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
1149 <div class="viewcode-block" id="ResourceManager.do_release"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_release">[docs]</a> <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1150 <span class="bp">self</span><span class="o">.</span><span class="n">set_released</span><span class="p">()</span>
1152 <div class="viewcode-block" id="ResourceManager.do_fail"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_fail">[docs]</a> <span class="k">def</span> <span class="nf">do_fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1153 <span class="bp">self</span><span class="o">.</span><span class="n">set_failed</span><span class="p">()</span>
1154 <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">inform_failure</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
1156 <div class="viewcode-block" id="ResourceManager.set_started"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_started">[docs]</a> <span class="k">def</span> <span class="nf">set_started</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1157 <span class="sd">""" Mark ResourceManager as STARTED """</span>
1158 <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">,</span> <span class="s">"_start_time"</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1159 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"----- STARTED ---- "</span><span class="p">)</span>
1161 <div class="viewcode-block" id="ResourceManager.set_stopped"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_stopped">[docs]</a> <span class="k">def</span> <span class="nf">set_stopped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1162 <span class="sd">""" Mark ResourceManager as STOPPED """</span>
1163 <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">,</span> <span class="s">"_stop_time"</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1164 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"----- STOPPED ---- "</span><span class="p">)</span>
1166 <div class="viewcode-block" id="ResourceManager.set_ready"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_ready">[docs]</a> <span class="k">def</span> <span class="nf">set_ready</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1167 <span class="sd">""" Mark ResourceManager as READY """</span>
1168 <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">,</span> <span class="s">"_ready_time"</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1169 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"----- READY ---- "</span><span class="p">)</span>
1171 <div class="viewcode-block" id="ResourceManager.set_released"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_released">[docs]</a> <span class="k">def</span> <span class="nf">set_released</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1172 <span class="sd">""" Mark ResourceManager as REALEASED """</span>
1173 <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">,</span> <span class="s">"_release_time"</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1175 <span class="n">msg</span> <span class="o">=</span> <span class="s">" </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> ----- RELEASED ----- "</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
1176 <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">)</span>
1177 <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
1179 <div class="viewcode-block" id="ResourceManager.set_failed"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_failed">[docs]</a> <span class="k">def</span> <span class="nf">set_failed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1180 <span class="sd">""" Mark ResourceManager as FAILED """</span>
1181 <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">FAILED</span><span class="p">,</span> <span class="s">"_failed_time"</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1183 <span class="n">msg</span> <span class="o">=</span> <span class="s">" </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> ----- FAILED ----- "</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
1184 <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">)</span>
1185 <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
1187 <div class="viewcode-block" id="ResourceManager.set_discovered"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_discovered">[docs]</a> <span class="k">def</span> <span class="nf">set_discovered</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1188 <span class="sd">""" Mark ResourceManager as DISCOVERED """</span>
1189 <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">DISCOVERED</span><span class="p">,</span> <span class="s">"_discover_time"</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1190 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"----- DISCOVERED ---- "</span><span class="p">)</span>
1192 <div class="viewcode-block" id="ResourceManager.set_reserved"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_reserved">[docs]</a> <span class="k">def</span> <span class="nf">set_reserved</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1193 <span class="sd">""" Mark ResourceManager as RESERVED """</span>
1194 <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">RESERVED</span><span class="p">,</span> <span class="s">"_reserved_time"</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1195 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"----- RESERVED ---- "</span><span class="p">)</span>
1197 <div class="viewcode-block" id="ResourceManager.set_provisioned"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_provisioned">[docs]</a> <span class="k">def</span> <span class="nf">set_provisioned</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1198 <span class="sd">""" Mark ResourceManager as PROVISIONED """</span>
1199 <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">,</span> <span class="s">"_provision_time"</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1200 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"----- PROVISIONED ---- "</span><span class="p">)</span>
1202 <div class="viewcode-block" id="ResourceManager.set_state"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_state">[docs]</a> <span class="k">def</span> <span class="nf">set_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">state_time_attr</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
1203 <span class="sd">""" Set the state of the RM while keeping a trace of the time """</span>
1205 <span class="c"># Ensure that RM state will not change after released</span>
1206 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
1207 <span class="k">return</span>
1209 <span class="n">time</span> <span class="o">=</span> <span class="n">time</span> <span class="ow">or</span> <span class="n">tnow</span><span class="p">()</span>
1210 <span class="bp">self</span><span class="o">.</span><span class="n">set_state_time</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">state_time_attr</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1212 <div class="viewcode-block" id="ResourceManager.set_state_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_state_time">[docs]</a> <span class="k">def</span> <span class="nf">set_state_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">state_time_attr</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span>
1213 <span class="sd">""" Set the time for the RM state change """</span>
1214 <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state_time_attr</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
1215 <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="n">state</span>
1217 <div class="viewcode-block" id="ResourceFactory"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory">[docs]</a><span class="k">class</span> <span class="nc">ResourceFactory</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
1218 <span class="n">_resource_types</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
1220 <span class="nd">@classmethod</span>
1221 <div class="viewcode-block" id="ResourceFactory.resource_types"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.resource_types">[docs]</a> <span class="k">def</span> <span class="nf">resource_types</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
1222 <span class="sd">"""Return the type of the Class"""</span>
1223 <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_resource_types</span>
1225 <span class="nd">@classmethod</span>
1226 <div class="viewcode-block" id="ResourceFactory.get_resource_type"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.get_resource_type">[docs]</a> <span class="k">def</span> <span class="nf">get_resource_type</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">rtype</span><span class="p">):</span>
1227 <span class="sd">"""Return the type of the Class"""</span>
1228 <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_resource_types</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">rtype</span><span class="p">)</span>
1230 <span class="nd">@classmethod</span>
1231 <div class="viewcode-block" id="ResourceFactory.register_type"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.register_type">[docs]</a> <span class="k">def</span> <span class="nf">register_type</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">rclass</span><span class="p">):</span>
1232 <span class="sd">"""Register a new Ressource Manager"""</span>
1233 <span class="n">cls</span><span class="o">.</span><span class="n">_resource_types</span><span class="p">[</span><span class="n">rclass</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()]</span> <span class="o">=</span> <span class="n">rclass</span>
1235 <span class="nd">@classmethod</span>
1236 <div class="viewcode-block" id="ResourceFactory.create"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.create">[docs]</a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">rtype</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
1237 <span class="sd">"""Create a new instance of a Ressource Manager"""</span>
1238 <span class="n">rclass</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_resource_types</span><span class="p">[</span><span class="n">rtype</span><span class="p">]</span>
1239 <span class="k">return</span> <span class="n">rclass</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
1241 <div class="viewcode-block" id="populate_factory"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.populate_factory">[docs]</a><span class="k">def</span> <span class="nf">populate_factory</span><span class="p">():</span>
1242 <span class="sd">"""Find and rgister all available RMs</span>
1243 <span class="sd"> """</span>
1244 <span class="c"># Once the factory is populated, don't repopulate</span>
1245 <span class="k">if</span> <span class="ow">not</span> <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">resource_types</span><span class="p">():</span>
1246 <span class="k">for</span> <span class="n">rclass</span> <span class="ow">in</span> <span class="n">find_types</span><span class="p">():</span>
1247 <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">register_type</span><span class="p">(</span><span class="n">rclass</span><span class="p">)</span>
1249 <div class="viewcode-block" id="find_types"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.find_types">[docs]</a><span class="k">def</span> <span class="nf">find_types</span><span class="p">():</span>
1250 <span class="sd">"""Look into the different folders to find all the </span>
1251 <span class="sd"> availables Resources Managers</span>
1252 <span class="sd"> """</span>
1253 <span class="n">search_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">"NEPI_SEARCH_PATH"</span><span class="p">,</span> <span class="s">""</span><span class="p">)</span>
1254 <span class="n">search_path</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">search_path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">" "</span><span class="p">))</span>
1256 <span class="kn">import</span> <span class="nn">inspect</span>
1257 <span class="kn">import</span> <span class="nn">nepi.resources</span>
1258 <span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">nepi</span><span class="o">.</span><span class="n">resources</span><span class="o">.</span><span class="n">__file__</span><span class="p">)</span>
1259 <span class="n">search_path</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
1261 <span class="n">types</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
1263 <span class="k">for</span> <span class="n">importer</span><span class="p">,</span> <span class="n">modname</span><span class="p">,</span> <span class="n">ispkg</span> <span class="ow">in</span> <span class="n">pkgutil</span><span class="o">.</span><span class="n">walk_packages</span><span class="p">(</span><span class="n">search_path</span><span class="p">,</span>
1264 <span class="n">prefix</span> <span class="o">=</span> <span class="s">"nepi.resources."</span><span class="p">):</span>
1266 <span class="n">loader</span> <span class="o">=</span> <span class="n">importer</span><span class="o">.</span><span class="n">find_module</span><span class="p">(</span><span class="n">modname</span><span class="p">)</span>
1268 <span class="k">try</span><span class="p">:</span>
1269 <span class="c"># Notice: Repeated calls to load_module will act as a reload of the module</span>
1270 <span class="k">if</span> <span class="n">modname</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">:</span>
1271 <span class="n">module</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">modname</span><span class="p">)</span>
1272 <span class="k">else</span><span class="p">:</span>
1273 <span class="n">module</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load_module</span><span class="p">(</span><span class="n">modname</span><span class="p">)</span>
1275 <span class="k">for</span> <span class="n">attrname</span> <span class="ow">in</span> <span class="nb">dir</span><span class="p">(</span><span class="n">module</span><span class="p">):</span>
1276 <span class="k">if</span> <span class="n">attrname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">"_"</span><span class="p">):</span>
1277 <span class="k">continue</span>
1279 <span class="n">attr</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">attrname</span><span class="p">)</span>
1281 <span class="k">if</span> <span class="n">attr</span> <span class="o">==</span> <span class="n">ResourceManager</span><span class="p">:</span>
1282 <span class="k">continue</span>
1284 <span class="k">if</span> <span class="ow">not</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isclass</span><span class="p">(</span><span class="n">attr</span><span class="p">):</span>
1285 <span class="k">continue</span>
1287 <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">attr</span><span class="p">,</span> <span class="n">ResourceManager</span><span class="p">):</span>
1288 <span class="n">types</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
1290 <span class="k">if</span> <span class="ow">not</span> <span class="n">modname</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">:</span>
1291 <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="n">modname</span><span class="p">]</span> <span class="o">=</span> <span class="n">module</span>
1293 <span class="k">except</span><span class="p">:</span>
1294 <span class="kn">import</span> <span class="nn">traceback</span>
1295 <span class="kn">import</span> <span class="nn">logging</span>
1296 <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
1297 <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s">"Resource.find_types()"</span><span class="p">)</span>
1298 <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">"Error while loading Resource Managers </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="n">err</span><span class="p">)</span>
1300 <span class="k">return</span> <span class="n">types</span>
1306 <div class="clearer"></div>
1308 <div class="related">
1311 <li class="right" style="margin-right: 10px">
1312 <a href="../../../genindex.html" title="General Index"
1315 <a href="../../../py-modindex.html" title="Python Module Index"
1317 <li><a href="../../../index.html">NEPI 3.0 documentation</a> »</li>
1318 <li><a href="../../index.html" >Module code</a> »</li>
1321 <div class="footer">
1322 © Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
1323 Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.