update NEPI version on sphinx docs
[nepi.git] / doc / sphinx / _build / html / _modules / nepi / resources / planetlab / plcapi.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5 <html xmlns="http://www.w3.org/1999/xhtml">
6   <head>
7     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8     
9     <title>nepi.resources.planetlab.plcapi &mdash; NEPI 3.2 documentation</title>
10     
11     <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
12     <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
13     
14     <script type="text/javascript">
15       var DOCUMENTATION_OPTIONS = {
16         URL_ROOT:    '../../../../',
17         VERSION:     '3.2',
18         COLLAPSE_INDEX: false,
19         FILE_SUFFIX: '.html',
20         HAS_SOURCE:  true
21       };
22     </script>
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.2 documentation" href="../../../../index.html" />
27     <link rel="up" title="Module code" href="../../../index.html" /> 
28   </head>
29   <body>
30     <div class="related">
31       <h3>Navigation</h3>
32       <ul>
33         <li class="right" style="margin-right: 10px">
34           <a href="../../../../genindex.html" title="General Index"
35              accesskey="I">index</a></li>
36         <li class="right" >
37           <a href="../../../../py-modindex.html" title="Python Module Index"
38              >modules</a> |</li>
39         <li><a href="../../../../index.html">NEPI 3.2 documentation</a> &raquo;</li>
40           <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
41       </ul>
42     </div>
43       <div class="sphinxsidebar">
44         <div class="sphinxsidebarwrapper">
45 <div id="searchbox" style="display: none">
46   <h3>Quick search</h3>
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" />
52     </form>
53     <p class="searchtip" style="font-size: 90%">
54     Enter search terms or a module, class or function name.
55     </p>
56 </div>
57 <script type="text/javascript">$('#searchbox').show(0);</script>
58         </div>
59       </div>
60
61     <div class="document">
62       <div class="documentwrapper">
63         <div class="bodywrapper">
64           <div class="body">
65             
66   <h1>Source code for nepi.resources.planetlab.plcapi</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 &lt;http://www.gnu.org/licenses/&gt;.</span>
82 <span class="c">#</span>
83 <span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
84
85 <span class="kn">import</span> <span class="nn">functools</span>
86 <span class="kn">import</span> <span class="nn">hashlib</span>
87 <span class="kn">import</span> <span class="nn">socket</span>
88 <span class="kn">import</span> <span class="nn">os</span>
89 <span class="kn">import</span> <span class="nn">time</span>
90 <span class="kn">import</span> <span class="nn">threading</span>
91 <span class="kn">import</span> <span class="nn">xmlrpclib</span>
92
93 <span class="k">def</span> <span class="nf">_retry</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
94     <span class="k">def</span> <span class="nf">rv</span><span class="p">(</span><span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
95         <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
96             <span class="k">try</span><span class="p">:</span>
97                 <span class="k">return</span> <span class="n">fn</span><span class="p">(</span><span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
98             <span class="k">except</span> <span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="ne">IOError</span><span class="p">,</span> <span class="ne">OSError</span><span class="p">):</span>
99                 <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">x</span><span class="o">*</span><span class="mi">5</span><span class="o">+</span><span class="mi">5</span><span class="p">)</span>
100         <span class="k">else</span><span class="p">:</span>
101             <span class="k">return</span> <span class="n">fn</span> <span class="p">(</span><span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
102     <span class="k">return</span> <span class="n">rv</span>
103
104 <div class="viewcode-block" id="PLCAPI"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI">[docs]</a><span class="k">class</span> <span class="nc">PLCAPI</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
105
106     <span class="n">_expected_methods</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span>
107         <span class="p">[</span><span class="s">&#39;AddNodeTag&#39;</span><span class="p">,</span> <span class="s">&#39;AddConfFile&#39;</span><span class="p">,</span> <span class="s">&#39;DeletePersonTag&#39;</span><span class="p">,</span> <span class="s">&#39;AddNodeType&#39;</span><span class="p">,</span>
108          <span class="s">&#39;DeleteBootState&#39;</span><span class="p">,</span> <span class="s">&#39;SliceListNames&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteKey&#39;</span><span class="p">,</span><span class="s">&#39;SliceGetTicket&#39;</span><span class="p">,</span> 
109          <span class="s">&#39;SliceUsersList&#39;</span><span class="p">,</span> <span class="s">&#39;SliceUpdate&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeGroups&#39;</span><span class="p">,</span> <span class="s">&#39;SliceCreate&#39;</span><span class="p">,</span> 
110          <span class="s">&#39;GetNetworkMethods&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeFlavour&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteNode&#39;</span><span class="p">,</span> <span class="s">&#39;BootNotifyOwners&#39;</span><span class="p">,</span>
111          <span class="s">&#39;AddPersonKey&#39;</span><span class="p">,</span> <span class="s">&#39;AddNode&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateNodeGroup&#39;</span><span class="p">,</span> <span class="s">&#39;GetAddressTypes&#39;</span><span class="p">,</span>
112          <span class="s">&#39;AddIlink&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteNetworkType&#39;</span><span class="p">,</span> <span class="s">&#39;GetInitScripts&#39;</span><span class="p">,</span> <span class="s">&#39;GenerateNodeConfFile&#39;</span><span class="p">,</span>
113          <span class="s">&#39;AddSite&#39;</span><span class="p">,</span> <span class="s">&#39;BindObjectToPeer&#39;</span><span class="p">,</span> <span class="s">&#39;SliceListUserSlices&#39;</span><span class="p">,</span> <span class="s">&#39;GetPeers&#39;</span><span class="p">,</span>
114          <span class="s">&#39;AddPeer&#39;</span><span class="p">,</span> <span class="s">&#39;DeletePeer&#39;</span><span class="p">,</span> <span class="s">&#39;AddRole&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteRole&#39;</span><span class="p">,</span> <span class="s">&#39;SetPersonPrimarySite&#39;</span><span class="p">,</span>
115          <span class="s">&#39;AddSiteAddress&#39;</span><span class="p">,</span> <span class="s">&#39;SliceDelete&#39;</span><span class="p">,</span> <span class="s">&#39;NotifyPersons&#39;</span><span class="p">,</span> <span class="s">&#39;GetKeyTypes&#39;</span><span class="p">,</span>
116          <span class="s">&#39;GetConfFiles&#39;</span><span class="p">,</span> <span class="s">&#39;GetIlinks&#39;</span><span class="p">,</span> <span class="s">&#39;AddTagType&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodes&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteNodeTag&#39;</span><span class="p">,</span>
117          <span class="s">&#39;DeleteSliceFromNodesWhitelist&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateAddress&#39;</span><span class="p">,</span> <span class="s">&#39;ResetPassword&#39;</span><span class="p">,</span> 
118          <span class="s">&#39;AddSliceToNodesWhitelist&#39;</span><span class="p">,</span> <span class="s">&#39;AddRoleToTagType&#39;</span><span class="p">,</span> <span class="s">&#39;AddLeases&#39;</span><span class="p">,</span>
119          <span class="s">&#39;GetAddresses&#39;</span><span class="p">,</span> <span class="s">&#39;AddInitScript&#39;</span><span class="p">,</span> <span class="s">&#39;RebootNode&#39;</span><span class="p">,</span> <span class="s">&#39;GetPCUTypes&#39;</span><span class="p">,</span> 
120          <span class="s">&#39;RefreshPeer&#39;</span><span class="p">,</span> <span class="s">&#39;GetBootMedium&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateKey&#39;</span><span class="p">,</span> <span class="s">&#39;UpdatePCU&#39;</span><span class="p">,</span> <span class="s">&#39;GetSession&#39;</span><span class="p">,</span>
121          <span class="s">&#39;AddInterfaceTag&#39;</span><span class="p">,</span> <span class="s">&#39;UpdatePCUType&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaces&#39;</span><span class="p">,</span> <span class="s">&#39;SliceExtendedInfo&#39;</span><span class="p">,</span>
122          <span class="s">&#39;SliceNodesList&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteRoleFromTagType&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteSlice&#39;</span><span class="p">,</span> <span class="s">&#39;GetSites&#39;</span><span class="p">,</span>
123          <span class="s">&#39;DeleteMessage&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceFamily&#39;</span><span class="p">,</span> <span class="s">&#39;GetPlcRelease&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateTagType&#39;</span><span class="p">,</span>
124          <span class="s">&#39;AddSliceInstantiation&#39;</span><span class="p">,</span> <span class="s">&#39;ResolveSlices&#39;</span><span class="p">,</span> <span class="s">&#39;GetSlices&#39;</span><span class="p">,</span>
125          <span class="s">&#39;DeleteRoleFromPerson&#39;</span><span class="p">,</span> <span class="s">&#39;GetSessions&#39;</span><span class="p">,</span> <span class="s">&#39;UpdatePeer&#39;</span><span class="p">,</span> <span class="s">&#39;VerifyPerson&#39;</span><span class="p">,</span>
126          <span class="s">&#39;GetPersonTags&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteKeyType&#39;</span><span class="p">,</span> <span class="s">&#39;AddSlice&#39;</span><span class="p">,</span> <span class="s">&#39;SliceUserAdd&#39;</span><span class="p">,</span>
127          <span class="s">&#39;DeleteSession&#39;</span><span class="p">,</span> <span class="s">&#39;GetMessages&#39;</span><span class="p">,</span> <span class="s">&#39;DeletePCU&#39;</span><span class="p">,</span> <span class="s">&#39;GetPeerData&#39;</span><span class="p">,</span>
128          <span class="s">&#39;DeletePersonFromSite&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteTagType&#39;</span><span class="p">,</span> <span class="s">&#39;GetPCUs&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateLeases&#39;</span><span class="p">,</span>
129          <span class="s">&#39;AddMessage&#39;</span><span class="p">,</span> <span class="s">&#39;DeletePCUProtocolType&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteInterfaceTag&#39;</span><span class="p">,</span>
130          <span class="s">&#39;AddPersonToSite&#39;</span><span class="p">,</span> <span class="s">&#39;GetSlivers&#39;</span><span class="p">,</span> <span class="s">&#39;SliceNodesDel&#39;</span><span class="p">,</span>
131          <span class="s">&#39;DeleteAddressTypeFromAddress&#39;</span><span class="p">,</span> <span class="s">&#39;AddNodeGroup&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceTags&#39;</span><span class="p">,</span>
132          <span class="s">&#39;DeleteSite&#39;</span><span class="p">,</span> <span class="s">&#39;GetSiteTags&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateMessage&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteSliceFromNodes&#39;</span><span class="p">,</span>
133          <span class="s">&#39;SliceRenew&#39;</span><span class="p">,</span> <span class="s">&#39;UpdatePCUProtocolType&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteSiteTag&#39;</span><span class="p">,</span>
134          <span class="s">&#39;GetPCUProtocolTypes&#39;</span><span class="p">,</span> <span class="s">&#39;GetEvents&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceTicket&#39;</span><span class="p">,</span> <span class="s">&#39;AddPersonTag&#39;</span><span class="p">,</span>
135          <span class="s">&#39;BootGetNodeDetails&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteInterface&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteNodeGroup&#39;</span><span class="p">,</span>
136          <span class="s">&#39;AddPCUProtocolType&#39;</span><span class="p">,</span> <span class="s">&#39;BootCheckAuthentication&#39;</span><span class="p">,</span> <span class="s">&#39;AddSiteTag&#39;</span><span class="p">,</span>
137          <span class="s">&#39;AddAddressTypeToAddress&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteConfFile&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteInitScript&#39;</span><span class="p">,</span>
138          <span class="s">&#39;DeletePerson&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteIlink&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteAddressType&#39;</span><span class="p">,</span> <span class="s">&#39;AddBootState&#39;</span><span class="p">,</span>
139          <span class="s">&#39;AuthCheck&#39;</span><span class="p">,</span> <span class="s">&#39;NotifySupport&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceInstantiations&#39;</span><span class="p">,</span> <span class="s">&#39;AddPCUType&#39;</span><span class="p">,</span>
140          <span class="s">&#39;AddPCU&#39;</span><span class="p">,</span> <span class="s">&#39;AddSession&#39;</span><span class="p">,</span> <span class="s">&#39;GetEventObjects&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateSiteTag&#39;</span><span class="p">,</span> 
141          <span class="s">&#39;UpdateNodeTag&#39;</span><span class="p">,</span> <span class="s">&#39;AddPerson&#39;</span><span class="p">,</span> <span class="s">&#39;BlacklistKey&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateInitScript&#39;</span><span class="p">,</span>
142          <span class="s">&#39;AddSliceToNodes&#39;</span><span class="p">,</span> <span class="s">&#39;RebootNodeWithPCU&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeTags&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceKeys&#39;</span><span class="p">,</span>
143          <span class="s">&#39;GetSliceSshKeys&#39;</span><span class="p">,</span> <span class="s">&#39;AddNetworkMethod&#39;</span><span class="p">,</span> <span class="s">&#39;SliceNodesAdd&#39;</span><span class="p">,</span>
144          <span class="s">&#39;DeletePersonFromSlice&#39;</span><span class="p">,</span> <span class="s">&#39;ReportRunlevel&#39;</span><span class="p">,</span> <span class="s">&#39;GetNetworkTypes&#39;</span><span class="p">,</span>
145          <span class="s">&#39;UpdateSite&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteConfFileFromNodeGroup&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateNode&#39;</span><span class="p">,</span>
146          <span class="s">&#39;DeleteSliceInstantiation&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteSliceTag&#39;</span><span class="p">,</span> <span class="s">&#39;BootUpdateNode&#39;</span><span class="p">,</span>
147          <span class="s">&#39;UpdatePerson&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateConfFile&#39;</span><span class="p">,</span> <span class="s">&#39;SliceUserDel&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteLeases&#39;</span><span class="p">,</span>
148          <span class="s">&#39;AddConfFileToNodeGroup&#39;</span><span class="p">,</span> <span class="s">&#39;UpdatePersonTag&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteConfFileFromNode&#39;</span><span class="p">,</span>
149          <span class="s">&#39;AddPersonToSlice&#39;</span><span class="p">,</span> <span class="s">&#39;UnBindObjectFromPeer&#39;</span><span class="p">,</span> <span class="s">&#39;AddNodeToPCU&#39;</span><span class="p">,</span>
150          <span class="s">&#39;GetLeaseGranularity&#39;</span><span class="p">,</span> <span class="s">&#39;DeletePCUType&#39;</span><span class="p">,</span> <span class="s">&#39;GetTagTypes&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeTypes&#39;</span><span class="p">,</span>
151          <span class="s">&#39;UpdateInterfaceTag&#39;</span><span class="p">,</span> <span class="s">&#39;GetRoles&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateSlice&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateSliceTag&#39;</span><span class="p">,</span>
152          <span class="s">&#39;AddSliceTag&#39;</span><span class="p">,</span> <span class="s">&#39;AddNetworkType&#39;</span><span class="p">,</span> <span class="s">&#39;AddInterface&#39;</span><span class="p">,</span> <span class="s">&#39;AddAddressType&#39;</span><span class="p">,</span>
153          <span class="s">&#39;AddRoleToPerson&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteNodeType&#39;</span><span class="p">,</span> <span class="s">&#39;GetLeases&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateInterface&#39;</span><span class="p">,</span>
154          <span class="s">&#39;SliceInfo&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteAddress&#39;</span><span class="p">,</span> <span class="s">&#39;SliceTicketGet&#39;</span><span class="p">,</span> <span class="s">&#39;GetPersons&#39;</span><span class="p">,</span>
155          <span class="s">&#39;GetWhitelist&#39;</span><span class="p">,</span> <span class="s">&#39;AddKeyType&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateAddressType&#39;</span><span class="p">,</span> <span class="s">&#39;GetPeerName&#39;</span><span class="p">,</span>
156          <span class="s">&#39;DeleteNetworkMethod&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateIlink&#39;</span><span class="p">,</span> <span class="s">&#39;AddConfFileToNode&#39;</span><span class="p">,</span> <span class="s">&#39;GetKeys&#39;</span><span class="p">,</span>
157          <span class="s">&#39;DeleteNodeFromPCU&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceTags&#39;</span><span class="p">,</span> <span class="s">&#39;GetBootStates&#39;</span><span class="p">,</span>
158          <span class="s">&#39;SetInterfaceSens&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeLoadm&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceRate&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeLoadw&#39;</span><span class="p">,</span>
159          <span class="s">&#39;SetInterfaceKey&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeSlices&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeLoadm&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceVref&#39;</span><span class="p">,</span>
160          <span class="s">&#39;GetInterfaceIwpriv&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeLoadw&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeSerial&#39;</span><span class="p">,</span>
161          <span class="s">&#39;GetNodePlainBootstrapfs&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeMEMw&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeResponse&#39;</span><span class="p">,</span>
162          <span class="s">&#39;SetInterfaceRate&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceInitscript&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeFcdistro&#39;</span><span class="p">,</span>
163          <span class="s">&#39;GetNodeLoady&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeArch&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeKargs&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeMEMm&#39;</span><span class="p">,</span>
164          <span class="s">&#39;SetNodeBWy&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeBWw&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceSecurityMode&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeBWm&#39;</span><span class="p">,</span>
165          <span class="s">&#39;SetNodeASType&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeKargs&#39;</span><span class="p">,</span> <span class="s">&#39;GetPersonColumnconf&#39;</span><span class="p">,</span>
166          <span class="s">&#39;GetNodeResponsem&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeCPUy&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeCramfs&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeSlicesw&#39;</span><span class="p">,</span>
167          <span class="s">&#39;SetPersonColumnconf&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeSlicesy&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeCPUw&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeBWy&#39;</span><span class="p">,</span> 
168          <span class="s">&#39;GetNodeCPUm&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceDriver&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeLoad&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceMode&#39;</span><span class="p">,</span>
169          <span class="s">&#39;GetNodeSerial&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeSlicesm&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeLoady&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeReliabilityw&#39;</span><span class="p">,</span>
170          <span class="s">&#39;SetSliceFcdistro&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeReliabilityy&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceEssid&#39;</span><span class="p">,</span>
171          <span class="s">&#39;SetSliceInitscriptCode&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeExtensions&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceOmfControl&#39;</span><span class="p">,</span>
172          <span class="s">&#39;SetNodeCity&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceIfname&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeHrn&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeNoHangcheck&#39;</span><span class="p">,</span> 
173          <span class="s">&#39;GetNodeNoHangcheck&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceFcdistro&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeCountry&#39;</span><span class="p">,</span>
174          <span class="s">&#39;SetNodeKvariant&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeKvariant&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeMEMy&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceIwpriv&#39;</span><span class="p">,</span>
175          <span class="s">&#39;GetNodeMEMw&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceBackdoor&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceFreq&#39;</span><span class="p">,</span>
176          <span class="s">&#39;SetInterfaceChannel&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceNw&#39;</span><span class="p">,</span> <span class="s">&#39;GetPersonShowconf&#39;</span><span class="p">,</span>
177          <span class="s">&#39;GetSliceInitscriptCode&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeMEM&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceEssid&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeMEMm&#39;</span><span class="p">,</span>
178          <span class="s">&#39;SetInterfaceMode&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceIwconfig&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeSlicesm&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeBWm&#39;</span><span class="p">,</span>
179          <span class="s">&#39;SetNodePlainBootstrapfs&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeRegion&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeCPU&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeSlicesw&#39;</span><span class="p">,</span>
180          <span class="s">&#39;SetNodeBW&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeSlices&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeCramfs&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeSlicesy&#39;</span><span class="p">,</span>
181          <span class="s">&#39;GetInterfaceKey&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceInitscript&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeCPUm&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceArch&#39;</span><span class="p">,</span>
182          <span class="s">&#39;SetNodeLoad&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeResponse&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceSliverHMAC&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeBWw&#39;</span><span class="p">,</span>
183          <span class="s">&#39;GetNodeRegion&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeMEMy&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeASType&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodePldistro&#39;</span><span class="p">,</span>
184          <span class="s">&#39;GetSliceArch&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeCountry&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceOmfControl&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeHrn&#39;</span><span class="p">,</span> 
185          <span class="s">&#39;GetNodeCity&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceAlias&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeBW&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodePldistro&#39;</span><span class="p">,</span>
186          <span class="s">&#39;GetSlicePldistro&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeASNumber&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceHmac&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceHmac&#39;</span><span class="p">,</span>
187          <span class="s">&#39;GetNodeMEM&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeASNumber&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceAlias&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceVref&#39;</span><span class="p">,</span>
188          <span class="s">&#39;GetNodeArch&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceSshKey&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceKey4&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceKey2&#39;</span><span class="p">,</span>
189          <span class="s">&#39;GetInterfaceKey3&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceKey1&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceBackdoor&#39;</span><span class="p">,</span>
190          <span class="s">&#39;GetInterfaceIfname&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceSliverHMAC&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeReliability&#39;</span><span class="p">,</span>
191          <span class="s">&#39;GetNodeCPU&#39;</span><span class="p">,</span> <span class="s">&#39;SetPersonShowconf&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeExtensions&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeCPUy&#39;</span><span class="p">,</span> 
192          <span class="s">&#39;SetNodeCPUw&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeResponsew&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeResponsey&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceSens&#39;</span><span class="p">,</span>
193          <span class="s">&#39;SetNodeResponsew&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeResponsey&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeReliability&#39;</span><span class="p">,</span>
194          <span class="s">&#39;GetNodeReliabilitym&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeResponsem&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceDriver&#39;</span><span class="p">,</span>
195          <span class="s">&#39;GetInterfaceSecurityMode&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeDeployment&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeReliabilitym&#39;</span><span class="p">,</span>
196          <span class="s">&#39;GetNodeFcdistro&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceFreq&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceNw&#39;</span><span class="p">,</span>
197          <span class="s">&#39;SetNodeReliabilityy&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeReliabilityw&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceIwconfig&#39;</span><span class="p">,</span>
198          <span class="s">&#39;SetSlicePldistro&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceSshKey&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeDeployment&#39;</span><span class="p">,</span>
199          <span class="s">&#39;GetInterfaceChannel&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceKey2&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceKey3&#39;</span><span class="p">,</span>
200          <span class="s">&#39;SetInterfaceKey1&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceKey4&#39;</span><span class="p">])</span>
201      
202     <span class="n">_required_methods</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
203
204     <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">username</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">hostname</span><span class="p">,</span> <span class="n">urlpattern</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">proxy</span><span class="p">,</span> <span class="n">session_key</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
205             <span class="n">local_peer</span> <span class="o">=</span> <span class="s">&quot;PLE&quot;</span><span class="p">):</span>
206
207         <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
208         <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
209         <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_cache</span> <span class="o">=</span> <span class="bp">None</span>
210         <span class="bp">self</span><span class="o">.</span><span class="n">_already_cached</span> <span class="o">=</span> <span class="bp">False</span>
211         <span class="bp">self</span><span class="o">.</span><span class="n">_ecobj</span> <span class="o">=</span> <span class="n">ec</span>
212         <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">=</span> <span class="mi">1</span> 
213
214         <span class="k">if</span> <span class="n">session_key</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
215             <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">AuthMethod</span><span class="o">=</span><span class="s">&#39;session&#39;</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session_key</span><span class="p">)</span>
216         <span class="k">elif</span> <span class="n">username</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">password</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
217             <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">AuthMethod</span><span class="o">=</span><span class="s">&#39;password&#39;</span><span class="p">,</span> <span class="n">Username</span><span class="o">=</span><span class="n">username</span><span class="p">,</span> <span class="n">AuthString</span><span class="o">=</span><span class="n">password</span><span class="p">)</span>
218         <span class="k">else</span><span class="p">:</span>
219             <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">AuthMethod</span><span class="o">=</span><span class="s">&#39;anonymous&#39;</span><span class="p">)</span>
220         
221         <span class="bp">self</span><span class="o">.</span><span class="n">_local_peer</span> <span class="o">=</span> <span class="n">local_peer</span>
222         <span class="bp">self</span><span class="o">.</span><span class="n">_url</span> <span class="o">=</span> <span class="n">urlpattern</span> <span class="o">%</span> <span class="p">{</span><span class="s">&#39;hostname&#39;</span><span class="p">:</span><span class="n">hostname</span><span class="p">}</span>
223
224         <span class="k">if</span> <span class="p">(</span><span class="n">proxy</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">):</span>
225             <span class="kn">import</span> <span class="nn">urllib2</span>
226             <span class="k">class</span> <span class="nc">HTTPSProxyTransport</span><span class="p">(</span><span class="n">xmlrpclib</span><span class="o">.</span><span class="n">Transport</span><span class="p">):</span>
227                 <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">proxy</span><span class="p">,</span> <span class="n">use_datetime</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
228                     <span class="n">opener</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">build_opener</span><span class="p">(</span><span class="n">urllib2</span><span class="o">.</span><span class="n">ProxyHandler</span><span class="p">({</span><span class="s">&quot;https&quot;</span> <span class="p">:</span> <span class="n">proxy</span><span class="p">}))</span>
229                     <span class="n">xmlrpclib</span><span class="o">.</span><span class="n">Transport</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">use_datetime</span><span class="p">)</span>
230                     <span class="bp">self</span><span class="o">.</span><span class="n">opener</span> <span class="o">=</span> <span class="n">opener</span>
231
232                 <span class="k">def</span> <span class="nf">request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">handler</span><span class="p">,</span> <span class="n">request_body</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
233                     <span class="n">req</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">Request</span><span class="p">(</span><span class="s">&#39;https://</span><span class="si">%s%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">handler</span><span class="p">),</span> <span class="n">request_body</span><span class="p">)</span>
234                     <span class="n">req</span><span class="o">.</span><span class="n">add_header</span><span class="p">(</span><span class="s">&#39;User-agent&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">user_agent</span><span class="p">)</span>
235                     <span class="bp">self</span><span class="o">.</span><span class="n">verbose</span> <span class="o">=</span> <span class="n">verbose</span>
236                     <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse_response</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">opener</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">req</span><span class="p">))</span>
237
238             <span class="bp">self</span><span class="o">.</span><span class="n">_proxy_transport</span> <span class="o">=</span> <span class="k">lambda</span> <span class="p">:</span> <span class="n">HTTPSProxyTransport</span><span class="p">(</span><span class="n">proxy</span><span class="p">)</span>
239         <span class="k">else</span><span class="p">:</span>
240             <span class="bp">self</span><span class="o">.</span><span class="n">_proxy_transport</span> <span class="o">=</span> <span class="k">lambda</span> <span class="p">:</span> <span class="bp">None</span>
241         
242         <span class="bp">self</span><span class="o">.</span><span class="n">threadlocal</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">local</span><span class="p">()</span>
243
244         <span class="c"># Load blacklist from file</span>
245         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ecobj</span><span class="o">.</span><span class="n">get_global</span><span class="p">(</span><span class="s">&#39;planetlab::Node&#39;</span><span class="p">,</span> <span class="s">&#39;persist_blacklist&#39;</span><span class="p">):</span>
246             <span class="bp">self</span><span class="o">.</span><span class="n">_set_blacklist</span><span class="p">()</span>
247
248     <span class="nd">@property</span>
249 <div class="viewcode-block" id="PLCAPI.api"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.api">[docs]</a>    <span class="k">def</span> <span class="nf">api</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
250         <span class="c"># Cannot reuse same proxy in all threads, py2.7 is not threadsafe</span>
251         <span class="k">return</span> <span class="n">xmlrpclib</span><span class="o">.</span><span class="n">ServerProxy</span><span class="p">(</span>
252             <span class="bp">self</span><span class="o">.</span><span class="n">_url</span> <span class="p">,</span>
253             <span class="n">transport</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proxy_transport</span><span class="p">(),</span>
254             <span class="n">allow_none</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
255         </div>
256     <span class="nd">@property</span>
257 <div class="viewcode-block" id="PLCAPI.mcapi"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.mcapi">[docs]</a>    <span class="k">def</span> <span class="nf">mcapi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
258         <span class="k">try</span><span class="p">:</span>
259             <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">threadlocal</span><span class="o">.</span><span class="n">mc</span>
260         <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
261             <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">api</span>
262         </div>
263 <div class="viewcode-block" id="PLCAPI.test"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.test">[docs]</a>    <span class="k">def</span> <span class="nf">test</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
264         <span class="c"># TODO: Use nepi utils Logger instead of warning!!</span>
265         <span class="kn">import</span> <span class="nn">warnings</span>
266         
267         <span class="c"># validate XMLRPC server checking supported API calls</span>
268         <span class="n">methods</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">listMethods</span><span class="p">)())</span>
269         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_required_methods</span> <span class="o">-</span> <span class="n">methods</span><span class="p">:</span>
270             <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">&quot;Unsupported REQUIRED methods: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
271                 <span class="s">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_required_methods</span> <span class="o">-</span> <span class="n">methods</span><span class="p">)),</span> <span class="p">)</span> <span class="p">)</span>
272             <span class="k">return</span> <span class="bp">False</span>
273
274         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_expected_methods</span> <span class="o">-</span> <span class="n">methods</span><span class="p">:</span>
275             <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">&quot;Unsupported EXPECTED methods: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
276                 <span class="s">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_expected_methods</span> <span class="o">-</span> <span class="n">methods</span><span class="p">)),</span> <span class="p">)</span> <span class="p">)</span>
277         
278         <span class="k">try</span><span class="p">:</span>
279             <span class="c"># test authorization</span>
280             <span class="n">network_types</span> <span class="o">=</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNetworkTypes</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">)</span>
281         <span class="k">except</span> <span class="p">(</span><span class="n">xmlrpclib</span><span class="o">.</span><span class="n">ProtocolError</span><span class="p">,</span> <span class="n">xmlrpclib</span><span class="o">.</span><span class="n">Fault</span><span class="p">),</span><span class="n">e</span><span class="p">:</span>
282             <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
283         
284         <span class="k">return</span> <span class="bp">True</span>
285 </div>
286     <span class="k">def</span> <span class="nf">_set_blacklist</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
287         <span class="n">nepi_home</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">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">&quot;~&quot;</span><span class="p">),</span> <span class="s">&quot;.nepi&quot;</span><span class="p">)</span>
288         <span class="n">plblacklist_file</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">join</span><span class="p">(</span><span class="n">nepi_home</span><span class="p">,</span> <span class="s">&quot;plblacklist.txt&quot;</span><span class="p">)</span>
289         <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">plblacklist_file</span><span class="p">,</span> <span class="s">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
290             <span class="n">hosts_tobl</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
291             <span class="k">if</span> <span class="n">hosts_tobl</span><span class="p">:</span>
292                 <span class="n">nodes_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="n">hosts_tobl</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">])</span>
293                 <span class="k">for</span> <span class="n">node_id</span> <span class="ow">in</span> <span class="n">nodes_id</span><span class="p">:</span>
294                     <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node_id</span><span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">])</span>
295     
296     <span class="nd">@property</span>
297 <div class="viewcode-block" id="PLCAPI.network_types"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.network_types">[docs]</a>    <span class="k">def</span> <span class="nf">network_types</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
298         <span class="k">try</span><span class="p">:</span>
299             <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_network_types</span>
300         <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
301             <span class="bp">self</span><span class="o">.</span><span class="n">_network_types</span> <span class="o">=</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNetworkTypes</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">)</span>
302             <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_network_types</span>
303     </div>
304     <span class="nd">@property</span>
305 <div class="viewcode-block" id="PLCAPI.peer_map"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.peer_map">[docs]</a>    <span class="k">def</span> <span class="nf">peer_map</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
306         <span class="k">try</span><span class="p">:</span>
307             <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peer_map</span>
308         <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
309             <span class="n">peers</span> <span class="o">=</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetPeers</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="p">{},</span> <span class="p">[</span><span class="s">&#39;shortname&#39;</span><span class="p">,</span><span class="s">&#39;peername&#39;</span><span class="p">,</span><span class="s">&#39;peer_id&#39;</span><span class="p">])</span>
310             
311             <span class="bp">self</span><span class="o">.</span><span class="n">_peer_map</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
312                 <span class="p">(</span><span class="n">peer</span><span class="p">[</span><span class="s">&#39;shortname&#39;</span><span class="p">],</span> <span class="n">peer</span><span class="p">[</span><span class="s">&#39;peer_id&#39;</span><span class="p">])</span>
313                 <span class="k">for</span> <span class="n">peer</span> <span class="ow">in</span> <span class="n">peers</span>
314             <span class="p">)</span>
315
316             <span class="bp">self</span><span class="o">.</span><span class="n">_peer_map</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
317                 <span class="p">(</span><span class="n">peer</span><span class="p">[</span><span class="s">&#39;peername&#39;</span><span class="p">],</span> <span class="n">peer</span><span class="p">[</span><span class="s">&#39;peer_id&#39;</span><span class="p">])</span>
318                 <span class="k">for</span> <span class="n">peer</span> <span class="ow">in</span> <span class="n">peers</span>
319             <span class="p">)</span>
320
321             <span class="bp">self</span><span class="o">.</span><span class="n">_peer_map</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
322                 <span class="p">(</span><span class="n">peer</span><span class="p">[</span><span class="s">&#39;peer_id&#39;</span><span class="p">],</span> <span class="n">peer</span><span class="p">[</span><span class="s">&#39;shortname&#39;</span><span class="p">])</span>
323                 <span class="k">for</span> <span class="n">peer</span> <span class="ow">in</span> <span class="n">peers</span>
324             <span class="p">)</span>
325
326             <span class="bp">self</span><span class="o">.</span><span class="n">_peer_map</span><span class="p">[</span><span class="bp">None</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_local_peer</span>
327             <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peer_map</span>
328 </div>
329 <div class="viewcode-block" id="PLCAPI.get_node_flavour"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_node_flavour">[docs]</a>    <span class="k">def</span> <span class="nf">get_node_flavour</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
330         <span class="sd">&quot;&quot;&quot;</span>
331 <span class="sd">        Returns detailed information on a given node&#39;s flavour,</span>
332 <span class="sd">        i.e. its base installation.</span>
333
334 <span class="sd">        This depends on the global PLC settings in the PLC_FLAVOUR area,</span>
335 <span class="sd">        optionnally overridden by any of the following tags if set on that node:</span>
336 <span class="sd">        &#39;arch&#39;, &#39;pldistro&#39;, &#39;fcdistro&#39;, &#39;deployment&#39;, &#39;extensions&#39;</span>
337 <span class="sd">        </span>
338 <span class="sd">        Params:</span>
339 <span class="sd">        </span>
340 <span class="sd">            * node : int or string</span>
341 <span class="sd">                - int, Node identifier</span>
342 <span class="sd">                - string, Fully qualified hostname</span>
343 <span class="sd">        </span>
344 <span class="sd">        Returns:</span>
345
346 <span class="sd">            struct</span>
347 <span class="sd">                * extensions : array of string, extensions to add to the base install</span>
348 <span class="sd">                * fcdistro : string, the fcdistro this node should be based upon</span>
349 <span class="sd">                * nodefamily : string, the nodefamily this node should be based upon</span>
350 <span class="sd">                * plain : boolean, use plain bootstrapfs image if set (for tests)  </span>
351 <span class="sd">        &quot;&quot;&quot;</span>
352         <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">long</span><span class="p">)):</span>
353             <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">,</span> <span class="s">&quot;Node must be either a non-unicode string or an int&quot;</span>
354         <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNodeFlavour</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
355     </div>
356 <div class="viewcode-block" id="PLCAPI.get_nodes"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_nodes">[docs]</a>    <span class="k">def</span> <span class="nf">get_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id_or_name</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">fields</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
357         <span class="sd">&quot;&quot;&quot;</span>
358 <span class="sd">        Returns an array of structs containing details about nodes. </span>
359 <span class="sd">        If node_id_or_name is specified and is an array of node identifiers</span>
360 <span class="sd">        or hostnames,  or the filters keyword argument with struct of node</span>
361 <span class="sd">        attributes, or node attributes by keyword argument,</span>
362 <span class="sd">        only nodes matching the filter will be returned.</span>
363
364 <span class="sd">        If fields is specified, only the specified details will be returned. </span>
365 <span class="sd">        NOTE that if fields is unspecified, the complete set of native fields are</span>
366 <span class="sd">        returned, which DOES NOT include tags at this time.</span>
367
368 <span class="sd">        Some fields may only be viewed by admins.</span>
369 <span class="sd">        </span>
370 <span class="sd">        Special params:</span>
371 <span class="sd">            </span>
372 <span class="sd">            fields: an optional list of fields to retrieve. The default is all.</span>
373 <span class="sd">            </span>
374 <span class="sd">            filters: an optional mapping with custom filters, which is the only</span>
375 <span class="sd">                way to support complex filters like negation and numeric comparisons.</span>
376 <span class="sd">                </span>
377 <span class="sd">            peer: a string (or sequence of strings) with the name(s) of peers</span>
378 <span class="sd">                to filter - or None for local nodes.</span>
379 <span class="sd">        &quot;&quot;&quot;</span>
380         <span class="k">if</span> <span class="n">fields</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
381             <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">(</span><span class="n">fields</span><span class="p">,)</span>
382         <span class="k">else</span><span class="p">:</span>
383             <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">()</span>
384
385         <span class="k">if</span> <span class="n">node_id_or_name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
386             <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNodes</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">node_id_or_name</span><span class="p">,</span> <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
387         <span class="k">else</span><span class="p">:</span>
388             <span class="n">filters</span> <span class="o">=</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;filters&#39;</span><span class="p">,{})</span>
389             
390             <span class="k">if</span> <span class="s">&#39;peer&#39;</span> <span class="ow">in</span> <span class="n">kw</span><span class="p">:</span>
391                 <span class="n">peer</span> <span class="o">=</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;peer&#39;</span><span class="p">)</span>
392                 
393                 <span class="n">name_to_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">peer_map</span><span class="o">.</span><span class="n">get</span>
394                 
395                 <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">peer</span><span class="p">,</span> <span class="s">&#39;__iter__&#39;</span><span class="p">):</span>
396                     <span class="c"># we can&#39;t mix local and external nodes, so</span>
397                     <span class="c"># split and re-issue recursively in that case</span>
398                     <span class="k">if</span> <span class="bp">None</span> <span class="ow">in</span> <span class="n">peer</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_local_peer</span> <span class="ow">in</span> <span class="n">peer</span><span class="p">:</span>
399                         <span class="k">if</span> <span class="bp">None</span> <span class="ow">in</span> <span class="n">peer</span><span class="p">:</span>    
400                             <span class="n">peer</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
401
402                         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_local_peer</span> <span class="ow">in</span> <span class="n">peer</span><span class="p">:</span>
403                             <span class="n">peer</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_local_peer</span><span class="p">)</span>
404
405                         <span class="k">return</span> <span class="p">(</span>
406                             <span class="bp">self</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="n">node_id_or_name</span><span class="p">,</span> <span class="n">fields</span><span class="p">,</span>
407                                     <span class="n">filters</span> <span class="o">=</span> <span class="n">filters</span><span class="p">,</span> <span class="n">peer</span><span class="o">=</span><span class="n">peer</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span> <span class="o">+</span> \
408                             <span class="bp">self</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="n">node_id_or_name</span><span class="p">,</span> <span class="n">fields</span><span class="p">,</span> 
409                                     <span class="n">filters</span> <span class="o">=</span> <span class="n">filters</span><span class="p">,</span> <span class="n">peer</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
410                          <span class="p">)</span>
411                     <span class="k">else</span><span class="p">:</span>
412                         <span class="n">peer_filter</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="n">name_to_id</span><span class="p">,</span> <span class="n">peer</span><span class="p">)</span>
413
414                 <span class="k">elif</span> <span class="n">peer</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">peer</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_local_peer</span><span class="p">:</span>
415                     <span class="n">peer_filter</span> <span class="o">=</span> <span class="bp">None</span>
416                 <span class="k">else</span><span class="p">:</span>
417                     <span class="n">peer_filter</span> <span class="o">=</span> <span class="n">name_to_id</span><span class="p">(</span><span class="n">peer</span><span class="p">)</span>
418                 
419                 <span class="n">filters</span><span class="p">[</span><span class="s">&#39;peer_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">peer_filter</span>
420             
421             <span class="n">filters</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span>
422
423             <span class="k">if</span> <span class="ow">not</span> <span class="n">filters</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">fieldstuple</span><span class="p">:</span>
424                 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_cache</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_already_cached</span><span class="p">:</span>
425                     <span class="bp">self</span><span class="o">.</span><span class="n">_already_cached</span> <span class="o">=</span> <span class="bp">True</span>
426                     <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_cache</span> <span class="o">=</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNodes</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">)</span>
427                 <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_cache</span><span class="p">:</span>
428                     <span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_cache</span><span class="p">:</span>
429                         <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
430                 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_cache</span>
431
432             <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNodes</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span> <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
433     </div>
434 <div class="viewcode-block" id="PLCAPI.get_node_tags"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_node_tags">[docs]</a>    <span class="k">def</span> <span class="nf">get_node_tags</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_tag_id</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">fields</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
435         <span class="k">if</span> <span class="n">fields</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
436             <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">(</span><span class="n">fields</span><span class="p">,)</span>
437         <span class="k">else</span><span class="p">:</span>
438             <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">()</span>
439
440         <span class="k">if</span> <span class="n">node_tag_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
441             <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNodeTags</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">node_tag_id</span><span class="p">,</span>
442                     <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
443         <span class="k">else</span><span class="p">:</span>
444             <span class="n">filters</span> <span class="o">=</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;filters&#39;</span><span class="p">,{})</span>
445             <span class="n">filters</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span>
446             <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNodeTags</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span>
447                     <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
448 </div>
449 <div class="viewcode-block" id="PLCAPI.get_slice_tags"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_tags">[docs]</a>    <span class="k">def</span> <span class="nf">get_slice_tags</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slice_tag_id</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">fields</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
450         <span class="k">if</span> <span class="n">fields</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
451             <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">(</span><span class="n">fields</span><span class="p">,)</span>
452         <span class="k">else</span><span class="p">:</span>
453             <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">()</span>
454
455         <span class="k">if</span> <span class="n">slice_tag_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
456             <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetSliceTags</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">slice_tag_id</span><span class="p">,</span>
457                     <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
458         <span class="k">else</span><span class="p">:</span>
459             <span class="n">filters</span> <span class="o">=</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;filters&#39;</span><span class="p">,{})</span>
460             <span class="n">filters</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span>
461             <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetSliceTags</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span>
462                     <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
463     </div>
464 <div class="viewcode-block" id="PLCAPI.get_interfaces"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_interfaces">[docs]</a>    <span class="k">def</span> <span class="nf">get_interfaces</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interface_id_or_ip</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">fields</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
465         <span class="k">if</span> <span class="n">fields</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
466             <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">(</span><span class="n">fields</span><span class="p">,)</span>
467         <span class="k">else</span><span class="p">:</span>
468             <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">()</span>
469
470         <span class="k">if</span> <span class="n">interface_id_or_ip</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
471             <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetInterfaces</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span>
472                     <span class="n">interface_id_or_ip</span><span class="p">,</span> <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
473         <span class="k">else</span><span class="p">:</span>
474             <span class="n">filters</span> <span class="o">=</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;filters&#39;</span><span class="p">,{})</span>
475             <span class="n">filters</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span>
476             <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetInterfaces</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span>
477                     <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
478         </div>
479 <div class="viewcode-block" id="PLCAPI.get_slices"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slices">[docs]</a>    <span class="k">def</span> <span class="nf">get_slices</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slice_id_or_name</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">fields</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
480         <span class="k">if</span> <span class="n">fields</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
481             <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">(</span><span class="n">fields</span><span class="p">,)</span>
482         <span class="k">else</span><span class="p">:</span>
483             <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">()</span>
484
485         <span class="k">if</span> <span class="n">slice_id_or_name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
486             <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetSlices</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">slice_id_or_name</span><span class="p">,</span>
487                     <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
488         <span class="k">else</span><span class="p">:</span>
489             <span class="n">filters</span> <span class="o">=</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;filters&#39;</span><span class="p">,{})</span>
490             <span class="n">filters</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span>
491             <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetSlices</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span>
492                     <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
493         </div>
494 <div class="viewcode-block" id="PLCAPI.update_slice"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.update_slice">[docs]</a>    <span class="k">def</span> <span class="nf">update_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slice_id_or_name</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
495         <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">UpdateSlice</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">slice_id_or_name</span><span class="p">,</span> <span class="n">kw</span><span class="p">)</span>
496 </div>
497 <div class="viewcode-block" id="PLCAPI.delete_slice_node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.delete_slice_node">[docs]</a>    <span class="k">def</span> <span class="nf">delete_slice_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slice_id_or_name</span><span class="p">,</span> <span class="n">node_id_or_hostname</span><span class="p">):</span>
498         <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">DeleteSliceFromNodes</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">slice_id_or_name</span><span class="p">,</span> <span class="n">node_id_or_hostname</span><span class="p">)</span>
499 </div>
500 <div class="viewcode-block" id="PLCAPI.start_multicall"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.start_multicall">[docs]</a>    <span class="k">def</span> <span class="nf">start_multicall</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
501         <span class="bp">self</span><span class="o">.</span><span class="n">threadlocal</span><span class="o">.</span><span class="n">mc</span> <span class="o">=</span> <span class="n">xmlrpclib</span><span class="o">.</span><span class="n">MultiCall</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="p">)</span>
502     </div>
503 <div class="viewcode-block" id="PLCAPI.finish_multicall"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.finish_multicall">[docs]</a>    <span class="k">def</span> <span class="nf">finish_multicall</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
504         <span class="n">mc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">threadlocal</span><span class="o">.</span><span class="n">mc</span>
505         <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">threadlocal</span><span class="o">.</span><span class="n">mc</span>
506         <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="n">mc</span><span class="p">)()</span>
507 </div>
508 <div class="viewcode-block" id="PLCAPI.get_slice_nodes"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_nodes">[docs]</a>    <span class="k">def</span> <span class="nf">get_slice_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">):</span>
509         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_slices</span><span class="p">(</span><span class="n">slicename</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;node_ids&#39;</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;node_ids&#39;</span><span class="p">]</span>
510 </div>
511 <div class="viewcode-block" id="PLCAPI.add_slice_nodes"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.add_slice_nodes">[docs]</a>    <span class="k">def</span> <span class="nf">add_slice_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">,</span> <span class="n">nodes</span><span class="p">):</span>
512         <span class="bp">self</span><span class="o">.</span><span class="n">update_slice</span><span class="p">(</span><span class="n">slicename</span><span class="p">,</span> <span class="n">nodes</span><span class="o">=</span><span class="n">nodes</span><span class="p">)</span>
513 </div>
514 <div class="viewcode-block" id="PLCAPI.get_node_info"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_node_info">[docs]</a>    <span class="k">def</span> <span class="nf">get_node_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span>
515         <span class="bp">self</span><span class="o">.</span><span class="n">start_multicall</span><span class="p">()</span>
516         <span class="n">info</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
517         <span class="n">tags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_node_tags</span><span class="p">(</span><span class="n">node_id</span><span class="o">=</span><span class="n">node_id</span><span class="p">,</span> <span class="n">fields</span><span class="o">=</span><span class="p">(</span><span class="s">&#39;tagname&#39;</span><span class="p">,</span><span class="s">&#39;value&#39;</span><span class="p">))</span>
518         <span class="n">info</span><span class="p">,</span> <span class="n">tags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">finish_multicall</span><span class="p">()</span>
519         <span class="k">return</span> <span class="n">info</span><span class="p">,</span> <span class="n">tags</span>
520 </div>
521 <div class="viewcode-block" id="PLCAPI.get_slice_id"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_id">[docs]</a>    <span class="k">def</span> <span class="nf">get_slice_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">):</span>
522         <span class="n">slice_id</span> <span class="o">=</span> <span class="bp">None</span>
523         <span class="n">slices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_slices</span><span class="p">(</span><span class="n">slicename</span><span class="p">,</span> <span class="n">fields</span><span class="o">=</span><span class="p">(</span><span class="s">&#39;slice_id&#39;</span><span class="p">,))</span>
524         <span class="k">if</span> <span class="n">slices</span><span class="p">:</span>
525             <span class="n">slice_id</span> <span class="o">=</span> <span class="n">slices</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;slice_id&#39;</span><span class="p">]</span>
526
527         <span class="c"># If it wasn&#39;t found, don&#39;t remember this failure, keep trying</span>
528         <span class="k">return</span> <span class="n">slice_id</span>
529 </div>
530 <div class="viewcode-block" id="PLCAPI.get_slice_vnet_sys_tag"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_vnet_sys_tag">[docs]</a>    <span class="k">def</span> <span class="nf">get_slice_vnet_sys_tag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">):</span>
531         <span class="n">slicetags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_slice_tags</span><span class="p">(</span>
532             <span class="n">name</span> <span class="o">=</span> <span class="n">slicename</span><span class="p">,</span>
533             <span class="n">tagname</span> <span class="o">=</span> <span class="s">&#39;vsys_vnet&#39;</span><span class="p">,</span>
534             <span class="n">fields</span><span class="o">=</span><span class="p">(</span><span class="s">&#39;value&#39;</span><span class="p">,))</span>
535
536         <span class="k">if</span> <span class="n">slicetags</span><span class="p">:</span>
537             <span class="k">return</span> <span class="n">slicetags</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;value&#39;</span><span class="p">]</span>
538         <span class="k">else</span><span class="p">:</span>
539             <span class="k">return</span> <span class="bp">None</span>
540 </div>
541 <div class="viewcode-block" id="PLCAPI.blacklist_host"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.blacklist_host">[docs]</a>    <span class="k">def</span> <span class="nf">blacklist_host</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span>
542         <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
543 </div>
544 <div class="viewcode-block" id="PLCAPI.blacklisted"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.blacklisted">[docs]</a>    <span class="k">def</span> <span class="nf">blacklisted</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
545         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span> 
546 </div>
547 <div class="viewcode-block" id="PLCAPI.unblacklist_host"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.unblacklist_host">[docs]</a>    <span class="k">def</span> <span class="nf">unblacklist_host</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span>
548         <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span><span class="p">[</span><span class="n">node_id</span><span class="p">]</span>
549 </div>
550 <div class="viewcode-block" id="PLCAPI.reserve_host"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.reserve_host">[docs]</a>    <span class="k">def</span> <span class="nf">reserve_host</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span>
551         <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
552 </div>
553 <div class="viewcode-block" id="PLCAPI.reserved"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.reserved">[docs]</a>    <span class="k">def</span> <span class="nf">reserved</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
554         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span>
555 </div>
556 <div class="viewcode-block" id="PLCAPI.unreserve_host"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.unreserve_host">[docs]</a>    <span class="k">def</span> <span class="nf">unreserve_host</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span>
557         <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span><span class="p">[</span><span class="n">node_id</span><span class="p">]</span>
558 </div>
559 <div class="viewcode-block" id="PLCAPI.release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.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>
560         <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">-=</span> <span class="mi">1</span>
561         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
562             <span class="n">blacklist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span>
563             <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
564             <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
565             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ecobj</span><span class="o">.</span><span class="n">get_global</span><span class="p">(</span><span class="s">&#39;PlanetlabNode&#39;</span><span class="p">,</span> <span class="s">&#39;persist_blacklist&#39;</span><span class="p">):</span>
566                 <span class="k">if</span> <span class="n">blacklist</span><span class="p">:</span>
567                     <span class="n">to_blacklist</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
568                     <span class="n">hostnames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">blacklist</span><span class="p">),</span> <span class="p">[</span><span class="s">&#39;hostname&#39;</span><span class="p">])</span>
569                     <span class="k">for</span> <span class="n">hostname</span> <span class="ow">in</span> <span class="n">hostnames</span><span class="p">:</span>
570                         <span class="n">to_blacklist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hostname</span><span class="p">[</span><span class="s">&#39;hostname&#39;</span><span class="p">])</span>
571     
572                     <span class="n">nepi_home</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">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">&quot;~&quot;</span><span class="p">),</span> <span class="s">&quot;.nepi&quot;</span><span class="p">)</span>
573                     <span class="n">plblacklist_file</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">join</span><span class="p">(</span><span class="n">nepi_home</span><span class="p">,</span> <span class="s">&quot;plblacklist.txt&quot;</span><span class="p">)</span>
574     
575                     <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">plblacklist_file</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
576                         <span class="k">for</span> <span class="n">host</span> <span class="ow">in</span> <span class="n">to_blacklist</span><span class="p">:</span>
577                             <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">host</span><span class="p">)</span>
578     
579 </div></div>
580 <div class="viewcode-block" id="PLCAPIFactory"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPIFactory">[docs]</a><span class="k">class</span> <span class="nc">PLCAPIFactory</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
581     <span class="sd">&quot;&quot;&quot; </span>
582 <span class="sd">    .. note::</span>
583
584 <span class="sd">        It allows PlanetLab RMs sharing a same slice, to use a same plcapi instance,</span>
585 <span class="sd">        and to sincronize blacklisted and reserved hosts.</span>
586
587 <span class="sd">    &quot;&quot;&quot;</span>
588     <span class="c"># use lock to avoid concurrent access to the Api list at the same times by 2 different threads</span>
589     <span class="n">_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
590     <span class="n">_apis</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
591
592     <span class="nd">@classmethod</span> 
593 <div class="viewcode-block" id="PLCAPIFactory.get_api"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPIFactory.get_api">[docs]</a>    <span class="k">def</span> <span class="nf">get_api</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">pl_user</span><span class="p">,</span> <span class="n">pl_pass</span><span class="p">,</span> <span class="n">pl_host</span><span class="p">,</span>
594             <span class="n">pl_ptn</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">proxy</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
595         <span class="sd">&quot;&quot;&quot; Get existing PLCAPI instance</span>
596
597 <span class="sd">        :param pl_user: Planelab user name (used for web login)</span>
598 <span class="sd">        :type pl_user: str</span>
599 <span class="sd">        :param pl_pass: Planetlab password (used for web login)</span>
600 <span class="sd">        :type pl_pass: str</span>
601 <span class="sd">        :param pl_host: Planetlab registry host (e.g. &quot;www.planet-lab.eu&quot;)</span>
602 <span class="sd">        :type pl_host: str</span>
603 <span class="sd">        :param pl_ptn: XMLRPC service pattern (e.g. https://%(hostname)s:443/PLCAPI/)</span>
604 <span class="sd">        :type pl_ptn: str</span>
605 <span class="sd">        :param proxy: Proxy service url</span>
606 <span class="sd">        :type pl_ptn: str</span>
607 <span class="sd">        &quot;&quot;&quot;</span>
608         <span class="k">if</span> <span class="n">pl_user</span> <span class="ow">and</span> <span class="n">pl_pass</span> <span class="ow">and</span> <span class="n">pl_host</span><span class="p">:</span>
609             <span class="n">key</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_make_key</span><span class="p">(</span><span class="n">pl_user</span><span class="p">,</span> <span class="n">pl_host</span><span class="p">)</span>
610             <span class="k">with</span> <span class="n">cls</span><span class="o">.</span><span class="n">_lock</span><span class="p">:</span>
611                 <span class="n">api</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
612                 <span class="k">if</span> <span class="ow">not</span> <span class="n">api</span><span class="p">:</span>
613                     <span class="n">api</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">create_api</span><span class="p">(</span><span class="n">pl_user</span><span class="p">,</span> <span class="n">pl_pass</span><span class="p">,</span> <span class="n">pl_host</span><span class="p">,</span> <span class="n">pl_ptn</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">proxy</span><span class="p">)</span>
614                 <span class="k">else</span><span class="p">:</span>
615                     <span class="n">api</span><span class="o">.</span><span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
616                 <span class="k">return</span> <span class="n">api</span>
617         <span class="k">return</span> <span class="bp">None</span>
618 </div>
619     <span class="nd">@classmethod</span> 
620 <div class="viewcode-block" id="PLCAPIFactory.create_api"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPIFactory.create_api">[docs]</a>    <span class="k">def</span> <span class="nf">create_api</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">pl_user</span><span class="p">,</span> <span class="n">pl_pass</span><span class="p">,</span> <span class="n">pl_host</span><span class="p">,</span>
621             <span class="n">pl_ptn</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">proxy</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
622         <span class="sd">&quot;&quot;&quot; Create an PLCAPI instance</span>
623
624 <span class="sd">        :param pl_user: Planelab user name (used for web login)</span>
625 <span class="sd">        :type pl_user: str</span>
626 <span class="sd">        :param pl_pass: Planetlab password (used for web login)</span>
627 <span class="sd">        :type pl_pass: str</span>
628 <span class="sd">        :param pl_host: Planetlab registry host (e.g. &quot;www.planet-lab.eu&quot;)</span>
629 <span class="sd">        :type pl_host: str</span>
630 <span class="sd">        :param pl_ptn: XMLRPC service pattern (e.g. https://%(hostname)s:443/PLCAPI/)</span>
631 <span class="sd">        :type pl_ptn: str</span>
632 <span class="sd">        :param proxy: Proxy service url</span>
633 <span class="sd">        :type pl_ptn: str</span>
634 <span class="sd">        &quot;&quot;&quot;</span>
635         <span class="n">api</span> <span class="o">=</span> <span class="n">PLCAPI</span><span class="p">(</span><span class="n">username</span> <span class="o">=</span> <span class="n">pl_user</span><span class="p">,</span> <span class="n">password</span> <span class="o">=</span> <span class="n">pl_pass</span><span class="p">,</span> <span class="n">hostname</span> <span class="o">=</span> <span class="n">pl_host</span><span class="p">,</span>
636             <span class="n">urlpattern</span> <span class="o">=</span> <span class="n">pl_ptn</span><span class="p">,</span> <span class="n">ec</span> <span class="o">=</span> <span class="n">ec</span><span class="p">,</span> <span class="n">proxy</span> <span class="o">=</span> <span class="n">proxy</span><span class="p">)</span>
637         <span class="n">key</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_make_key</span><span class="p">(</span><span class="n">pl_user</span><span class="p">,</span> <span class="n">pl_host</span><span class="p">)</span>
638         <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">api</span>
639         <span class="k">return</span> <span class="n">api</span>
640 </div>
641     <span class="nd">@classmethod</span> 
642     <span class="k">def</span> <span class="nf">_make_key</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
643         <span class="sd">&quot;&quot;&quot; Hash the credentials in order to create a key</span>
644
645 <span class="sd">        :param args: list of arguments used to create the hash (user, host, port, ...)</span>
646 <span class="sd">        :type args: list of args</span>
647
648 <span class="sd">        &quot;&quot;&quot;</span>
649         <span class="n">skey</span> <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">args</span><span class="p">))</span>
650         <span class="k">return</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">md5</span><span class="p">(</span><span class="n">skey</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
651 </pre></div></div>
652
653           </div>
654         </div>
655       </div>
656       <div class="clearer"></div>
657     </div>
658     <div class="related">
659       <h3>Navigation</h3>
660       <ul>
661         <li class="right" style="margin-right: 10px">
662           <a href="../../../../genindex.html" title="General Index"
663              >index</a></li>
664         <li class="right" >
665           <a href="../../../../py-modindex.html" title="Python Module Index"
666              >modules</a> |</li>
667         <li><a href="../../../../index.html">NEPI 3.2 documentation</a> &raquo;</li>
668           <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
669       </ul>
670     </div>
671     <div class="footer">
672         &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
673       Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
674     </div>
675   </body>
676 </html>