1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5 <html xmlns="http://www.w3.org/1999/xhtml">
7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9 <title>nepi.resources.planetlab.plcapi — NEPI 3.0 documentation</title>
11 <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
12 <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
14 <script type="text/javascript">
15 var DOCUMENTATION_OPTIONS = {
16 URL_ROOT: '../../../../',
18 COLLAPSE_INDEX: false,
23 <script type="text/javascript" src="../../../../_static/jquery.js"></script>
24 <script type="text/javascript" src="../../../../_static/underscore.js"></script>
25 <script type="text/javascript" src="../../../../_static/doctools.js"></script>
26 <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
27 <link rel="up" title="Module code" href="../../../index.html" />
33 <li class="right" style="margin-right: 10px">
34 <a href="../../../../genindex.html" title="General Index"
35 accesskey="I">index</a></li>
37 <a href="../../../../py-modindex.html" title="Python Module Index"
39 <li><a href="../../../../index.html">NEPI 3.0 documentation</a> »</li>
40 <li><a href="../../../index.html" accesskey="U">Module code</a> »</li>
43 <div class="sphinxsidebar">
44 <div class="sphinxsidebarwrapper">
45 <div id="searchbox" style="display: none">
47 <form class="search" action="../../../../search.html" method="get">
48 <input type="text" name="q" />
49 <input type="submit" value="Go" />
50 <input type="hidden" name="check_keywords" value="yes" />
51 <input type="hidden" name="area" value="default" />
53 <p class="searchtip" style="font-size: 90%">
54 Enter search terms or a module, class or function name.
57 <script type="text/javascript">$('#searchbox').show(0);</script>
61 <div class="document">
62 <div class="documentwrapper">
63 <div class="bodywrapper">
66 <h1>Source code for nepi.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 <http://www.gnu.org/licenses/>.</span>
82 <span class="c">#</span>
83 <span class="c"># Author: Alina Quereilhac <alina.quereilhac@inria.fr></span>
85 <span class="kn">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>
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>
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>
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">'AddNodeTag'</span><span class="p">,</span> <span class="s">'AddConfFile'</span><span class="p">,</span> <span class="s">'DeletePersonTag'</span><span class="p">,</span> <span class="s">'AddNodeType'</span><span class="p">,</span>
108 <span class="s">'DeleteBootState'</span><span class="p">,</span> <span class="s">'SliceListNames'</span><span class="p">,</span> <span class="s">'DeleteKey'</span><span class="p">,</span><span class="s">'SliceGetTicket'</span><span class="p">,</span>
109 <span class="s">'SliceUsersList'</span><span class="p">,</span> <span class="s">'SliceUpdate'</span><span class="p">,</span> <span class="s">'GetNodeGroups'</span><span class="p">,</span> <span class="s">'SliceCreate'</span><span class="p">,</span>
110 <span class="s">'GetNetworkMethods'</span><span class="p">,</span> <span class="s">'GetNodeFlavour'</span><span class="p">,</span> <span class="s">'DeleteNode'</span><span class="p">,</span> <span class="s">'BootNotifyOwners'</span><span class="p">,</span>
111 <span class="s">'AddPersonKey'</span><span class="p">,</span> <span class="s">'AddNode'</span><span class="p">,</span> <span class="s">'UpdateNodeGroup'</span><span class="p">,</span> <span class="s">'GetAddressTypes'</span><span class="p">,</span>
112 <span class="s">'AddIlink'</span><span class="p">,</span> <span class="s">'DeleteNetworkType'</span><span class="p">,</span> <span class="s">'GetInitScripts'</span><span class="p">,</span> <span class="s">'GenerateNodeConfFile'</span><span class="p">,</span>
113 <span class="s">'AddSite'</span><span class="p">,</span> <span class="s">'BindObjectToPeer'</span><span class="p">,</span> <span class="s">'SliceListUserSlices'</span><span class="p">,</span> <span class="s">'GetPeers'</span><span class="p">,</span>
114 <span class="s">'AddPeer'</span><span class="p">,</span> <span class="s">'DeletePeer'</span><span class="p">,</span> <span class="s">'AddRole'</span><span class="p">,</span> <span class="s">'DeleteRole'</span><span class="p">,</span> <span class="s">'SetPersonPrimarySite'</span><span class="p">,</span>
115 <span class="s">'AddSiteAddress'</span><span class="p">,</span> <span class="s">'SliceDelete'</span><span class="p">,</span> <span class="s">'NotifyPersons'</span><span class="p">,</span> <span class="s">'GetKeyTypes'</span><span class="p">,</span>
116 <span class="s">'GetConfFiles'</span><span class="p">,</span> <span class="s">'GetIlinks'</span><span class="p">,</span> <span class="s">'AddTagType'</span><span class="p">,</span> <span class="s">'GetNodes'</span><span class="p">,</span> <span class="s">'DeleteNodeTag'</span><span class="p">,</span>
117 <span class="s">'DeleteSliceFromNodesWhitelist'</span><span class="p">,</span> <span class="s">'UpdateAddress'</span><span class="p">,</span> <span class="s">'ResetPassword'</span><span class="p">,</span>
118 <span class="s">'AddSliceToNodesWhitelist'</span><span class="p">,</span> <span class="s">'AddRoleToTagType'</span><span class="p">,</span> <span class="s">'AddLeases'</span><span class="p">,</span>
119 <span class="s">'GetAddresses'</span><span class="p">,</span> <span class="s">'AddInitScript'</span><span class="p">,</span> <span class="s">'RebootNode'</span><span class="p">,</span> <span class="s">'GetPCUTypes'</span><span class="p">,</span>
120 <span class="s">'RefreshPeer'</span><span class="p">,</span> <span class="s">'GetBootMedium'</span><span class="p">,</span> <span class="s">'UpdateKey'</span><span class="p">,</span> <span class="s">'UpdatePCU'</span><span class="p">,</span> <span class="s">'GetSession'</span><span class="p">,</span>
121 <span class="s">'AddInterfaceTag'</span><span class="p">,</span> <span class="s">'UpdatePCUType'</span><span class="p">,</span> <span class="s">'GetInterfaces'</span><span class="p">,</span> <span class="s">'SliceExtendedInfo'</span><span class="p">,</span>
122 <span class="s">'SliceNodesList'</span><span class="p">,</span> <span class="s">'DeleteRoleFromTagType'</span><span class="p">,</span> <span class="s">'DeleteSlice'</span><span class="p">,</span> <span class="s">'GetSites'</span><span class="p">,</span>
123 <span class="s">'DeleteMessage'</span><span class="p">,</span> <span class="s">'GetSliceFamily'</span><span class="p">,</span> <span class="s">'GetPlcRelease'</span><span class="p">,</span> <span class="s">'UpdateTagType'</span><span class="p">,</span>
124 <span class="s">'AddSliceInstantiation'</span><span class="p">,</span> <span class="s">'ResolveSlices'</span><span class="p">,</span> <span class="s">'GetSlices'</span><span class="p">,</span>
125 <span class="s">'DeleteRoleFromPerson'</span><span class="p">,</span> <span class="s">'GetSessions'</span><span class="p">,</span> <span class="s">'UpdatePeer'</span><span class="p">,</span> <span class="s">'VerifyPerson'</span><span class="p">,</span>
126 <span class="s">'GetPersonTags'</span><span class="p">,</span> <span class="s">'DeleteKeyType'</span><span class="p">,</span> <span class="s">'AddSlice'</span><span class="p">,</span> <span class="s">'SliceUserAdd'</span><span class="p">,</span>
127 <span class="s">'DeleteSession'</span><span class="p">,</span> <span class="s">'GetMessages'</span><span class="p">,</span> <span class="s">'DeletePCU'</span><span class="p">,</span> <span class="s">'GetPeerData'</span><span class="p">,</span>
128 <span class="s">'DeletePersonFromSite'</span><span class="p">,</span> <span class="s">'DeleteTagType'</span><span class="p">,</span> <span class="s">'GetPCUs'</span><span class="p">,</span> <span class="s">'UpdateLeases'</span><span class="p">,</span>
129 <span class="s">'AddMessage'</span><span class="p">,</span> <span class="s">'DeletePCUProtocolType'</span><span class="p">,</span> <span class="s">'DeleteInterfaceTag'</span><span class="p">,</span>
130 <span class="s">'AddPersonToSite'</span><span class="p">,</span> <span class="s">'GetSlivers'</span><span class="p">,</span> <span class="s">'SliceNodesDel'</span><span class="p">,</span>
131 <span class="s">'DeleteAddressTypeFromAddress'</span><span class="p">,</span> <span class="s">'AddNodeGroup'</span><span class="p">,</span> <span class="s">'GetSliceTags'</span><span class="p">,</span>
132 <span class="s">'DeleteSite'</span><span class="p">,</span> <span class="s">'GetSiteTags'</span><span class="p">,</span> <span class="s">'UpdateMessage'</span><span class="p">,</span> <span class="s">'DeleteSliceFromNodes'</span><span class="p">,</span>
133 <span class="s">'SliceRenew'</span><span class="p">,</span> <span class="s">'UpdatePCUProtocolType'</span><span class="p">,</span> <span class="s">'DeleteSiteTag'</span><span class="p">,</span>
134 <span class="s">'GetPCUProtocolTypes'</span><span class="p">,</span> <span class="s">'GetEvents'</span><span class="p">,</span> <span class="s">'GetSliceTicket'</span><span class="p">,</span> <span class="s">'AddPersonTag'</span><span class="p">,</span>
135 <span class="s">'BootGetNodeDetails'</span><span class="p">,</span> <span class="s">'DeleteInterface'</span><span class="p">,</span> <span class="s">'DeleteNodeGroup'</span><span class="p">,</span>
136 <span class="s">'AddPCUProtocolType'</span><span class="p">,</span> <span class="s">'BootCheckAuthentication'</span><span class="p">,</span> <span class="s">'AddSiteTag'</span><span class="p">,</span>
137 <span class="s">'AddAddressTypeToAddress'</span><span class="p">,</span> <span class="s">'DeleteConfFile'</span><span class="p">,</span> <span class="s">'DeleteInitScript'</span><span class="p">,</span>
138 <span class="s">'DeletePerson'</span><span class="p">,</span> <span class="s">'DeleteIlink'</span><span class="p">,</span> <span class="s">'DeleteAddressType'</span><span class="p">,</span> <span class="s">'AddBootState'</span><span class="p">,</span>
139 <span class="s">'AuthCheck'</span><span class="p">,</span> <span class="s">'NotifySupport'</span><span class="p">,</span> <span class="s">'GetSliceInstantiations'</span><span class="p">,</span> <span class="s">'AddPCUType'</span><span class="p">,</span>
140 <span class="s">'AddPCU'</span><span class="p">,</span> <span class="s">'AddSession'</span><span class="p">,</span> <span class="s">'GetEventObjects'</span><span class="p">,</span> <span class="s">'UpdateSiteTag'</span><span class="p">,</span>
141 <span class="s">'UpdateNodeTag'</span><span class="p">,</span> <span class="s">'AddPerson'</span><span class="p">,</span> <span class="s">'BlacklistKey'</span><span class="p">,</span> <span class="s">'UpdateInitScript'</span><span class="p">,</span>
142 <span class="s">'AddSliceToNodes'</span><span class="p">,</span> <span class="s">'RebootNodeWithPCU'</span><span class="p">,</span> <span class="s">'GetNodeTags'</span><span class="p">,</span> <span class="s">'GetSliceKeys'</span><span class="p">,</span>
143 <span class="s">'GetSliceSshKeys'</span><span class="p">,</span> <span class="s">'AddNetworkMethod'</span><span class="p">,</span> <span class="s">'SliceNodesAdd'</span><span class="p">,</span>
144 <span class="s">'DeletePersonFromSlice'</span><span class="p">,</span> <span class="s">'ReportRunlevel'</span><span class="p">,</span> <span class="s">'GetNetworkTypes'</span><span class="p">,</span>
145 <span class="s">'UpdateSite'</span><span class="p">,</span> <span class="s">'DeleteConfFileFromNodeGroup'</span><span class="p">,</span> <span class="s">'UpdateNode'</span><span class="p">,</span>
146 <span class="s">'DeleteSliceInstantiation'</span><span class="p">,</span> <span class="s">'DeleteSliceTag'</span><span class="p">,</span> <span class="s">'BootUpdateNode'</span><span class="p">,</span>
147 <span class="s">'UpdatePerson'</span><span class="p">,</span> <span class="s">'UpdateConfFile'</span><span class="p">,</span> <span class="s">'SliceUserDel'</span><span class="p">,</span> <span class="s">'DeleteLeases'</span><span class="p">,</span>
148 <span class="s">'AddConfFileToNodeGroup'</span><span class="p">,</span> <span class="s">'UpdatePersonTag'</span><span class="p">,</span> <span class="s">'DeleteConfFileFromNode'</span><span class="p">,</span>
149 <span class="s">'AddPersonToSlice'</span><span class="p">,</span> <span class="s">'UnBindObjectFromPeer'</span><span class="p">,</span> <span class="s">'AddNodeToPCU'</span><span class="p">,</span>
150 <span class="s">'GetLeaseGranularity'</span><span class="p">,</span> <span class="s">'DeletePCUType'</span><span class="p">,</span> <span class="s">'GetTagTypes'</span><span class="p">,</span> <span class="s">'GetNodeTypes'</span><span class="p">,</span>
151 <span class="s">'UpdateInterfaceTag'</span><span class="p">,</span> <span class="s">'GetRoles'</span><span class="p">,</span> <span class="s">'UpdateSlice'</span><span class="p">,</span> <span class="s">'UpdateSliceTag'</span><span class="p">,</span>
152 <span class="s">'AddSliceTag'</span><span class="p">,</span> <span class="s">'AddNetworkType'</span><span class="p">,</span> <span class="s">'AddInterface'</span><span class="p">,</span> <span class="s">'AddAddressType'</span><span class="p">,</span>
153 <span class="s">'AddRoleToPerson'</span><span class="p">,</span> <span class="s">'DeleteNodeType'</span><span class="p">,</span> <span class="s">'GetLeases'</span><span class="p">,</span> <span class="s">'UpdateInterface'</span><span class="p">,</span>
154 <span class="s">'SliceInfo'</span><span class="p">,</span> <span class="s">'DeleteAddress'</span><span class="p">,</span> <span class="s">'SliceTicketGet'</span><span class="p">,</span> <span class="s">'GetPersons'</span><span class="p">,</span>
155 <span class="s">'GetWhitelist'</span><span class="p">,</span> <span class="s">'AddKeyType'</span><span class="p">,</span> <span class="s">'UpdateAddressType'</span><span class="p">,</span> <span class="s">'GetPeerName'</span><span class="p">,</span>
156 <span class="s">'DeleteNetworkMethod'</span><span class="p">,</span> <span class="s">'UpdateIlink'</span><span class="p">,</span> <span class="s">'AddConfFileToNode'</span><span class="p">,</span> <span class="s">'GetKeys'</span><span class="p">,</span>
157 <span class="s">'DeleteNodeFromPCU'</span><span class="p">,</span> <span class="s">'GetInterfaceTags'</span><span class="p">,</span> <span class="s">'GetBootStates'</span><span class="p">,</span>
158 <span class="s">'SetInterfaceSens'</span><span class="p">,</span> <span class="s">'SetNodeLoadm'</span><span class="p">,</span> <span class="s">'GetInterfaceRate'</span><span class="p">,</span> <span class="s">'GetNodeLoadw'</span><span class="p">,</span>
159 <span class="s">'SetInterfaceKey'</span><span class="p">,</span> <span class="s">'GetNodeSlices'</span><span class="p">,</span> <span class="s">'GetNodeLoadm'</span><span class="p">,</span> <span class="s">'SetSliceVref'</span><span class="p">,</span>
160 <span class="s">'GetInterfaceIwpriv'</span><span class="p">,</span> <span class="s">'SetNodeLoadw'</span><span class="p">,</span> <span class="s">'SetNodeSerial'</span><span class="p">,</span>
161 <span class="s">'GetNodePlainBootstrapfs'</span><span class="p">,</span> <span class="s">'SetNodeMEMw'</span><span class="p">,</span> <span class="s">'GetNodeResponse'</span><span class="p">,</span>
162 <span class="s">'SetInterfaceRate'</span><span class="p">,</span> <span class="s">'SetSliceInitscript'</span><span class="p">,</span> <span class="s">'SetNodeFcdistro'</span><span class="p">,</span>
163 <span class="s">'GetNodeLoady'</span><span class="p">,</span> <span class="s">'SetNodeArch'</span><span class="p">,</span> <span class="s">'SetNodeKargs'</span><span class="p">,</span> <span class="s">'SetNodeMEMm'</span><span class="p">,</span>
164 <span class="s">'SetNodeBWy'</span><span class="p">,</span> <span class="s">'SetNodeBWw'</span><span class="p">,</span> <span class="s">'SetInterfaceSecurityMode'</span><span class="p">,</span> <span class="s">'SetNodeBWm'</span><span class="p">,</span>
165 <span class="s">'SetNodeASType'</span><span class="p">,</span> <span class="s">'GetNodeKargs'</span><span class="p">,</span> <span class="s">'GetPersonColumnconf'</span><span class="p">,</span>
166 <span class="s">'GetNodeResponsem'</span><span class="p">,</span> <span class="s">'GetNodeCPUy'</span><span class="p">,</span> <span class="s">'GetNodeCramfs'</span><span class="p">,</span> <span class="s">'SetNodeSlicesw'</span><span class="p">,</span>
167 <span class="s">'SetPersonColumnconf'</span><span class="p">,</span> <span class="s">'SetNodeSlicesy'</span><span class="p">,</span> <span class="s">'GetNodeCPUw'</span><span class="p">,</span> <span class="s">'GetNodeBWy'</span><span class="p">,</span>
168 <span class="s">'GetNodeCPUm'</span><span class="p">,</span> <span class="s">'GetInterfaceDriver'</span><span class="p">,</span> <span class="s">'GetNodeLoad'</span><span class="p">,</span> <span class="s">'GetInterfaceMode'</span><span class="p">,</span>
169 <span class="s">'GetNodeSerial'</span><span class="p">,</span> <span class="s">'SetNodeSlicesm'</span><span class="p">,</span> <span class="s">'SetNodeLoady'</span><span class="p">,</span> <span class="s">'GetNodeReliabilityw'</span><span class="p">,</span>
170 <span class="s">'SetSliceFcdistro'</span><span class="p">,</span> <span class="s">'GetNodeReliabilityy'</span><span class="p">,</span> <span class="s">'SetInterfaceEssid'</span><span class="p">,</span>
171 <span class="s">'SetSliceInitscriptCode'</span><span class="p">,</span> <span class="s">'GetNodeExtensions'</span><span class="p">,</span> <span class="s">'GetSliceOmfControl'</span><span class="p">,</span>
172 <span class="s">'SetNodeCity'</span><span class="p">,</span> <span class="s">'SetInterfaceIfname'</span><span class="p">,</span> <span class="s">'SetNodeHrn'</span><span class="p">,</span> <span class="s">'SetNodeNoHangcheck'</span><span class="p">,</span>
173 <span class="s">'GetNodeNoHangcheck'</span><span class="p">,</span> <span class="s">'GetSliceFcdistro'</span><span class="p">,</span> <span class="s">'SetNodeCountry'</span><span class="p">,</span>
174 <span class="s">'SetNodeKvariant'</span><span class="p">,</span> <span class="s">'GetNodeKvariant'</span><span class="p">,</span> <span class="s">'GetNodeMEMy'</span><span class="p">,</span> <span class="s">'SetInterfaceIwpriv'</span><span class="p">,</span>
175 <span class="s">'GetNodeMEMw'</span><span class="p">,</span> <span class="s">'SetInterfaceBackdoor'</span><span class="p">,</span> <span class="s">'GetInterfaceFreq'</span><span class="p">,</span>
176 <span class="s">'SetInterfaceChannel'</span><span class="p">,</span> <span class="s">'SetInterfaceNw'</span><span class="p">,</span> <span class="s">'GetPersonShowconf'</span><span class="p">,</span>
177 <span class="s">'GetSliceInitscriptCode'</span><span class="p">,</span> <span class="s">'SetNodeMEM'</span><span class="p">,</span> <span class="s">'GetInterfaceEssid'</span><span class="p">,</span> <span class="s">'GetNodeMEMm'</span><span class="p">,</span>
178 <span class="s">'SetInterfaceMode'</span><span class="p">,</span> <span class="s">'SetInterfaceIwconfig'</span><span class="p">,</span> <span class="s">'GetNodeSlicesm'</span><span class="p">,</span> <span class="s">'GetNodeBWm'</span><span class="p">,</span>
179 <span class="s">'SetNodePlainBootstrapfs'</span><span class="p">,</span> <span class="s">'SetNodeRegion'</span><span class="p">,</span> <span class="s">'SetNodeCPU'</span><span class="p">,</span> <span class="s">'GetNodeSlicesw'</span><span class="p">,</span>
180 <span class="s">'SetNodeBW'</span><span class="p">,</span> <span class="s">'SetNodeSlices'</span><span class="p">,</span> <span class="s">'SetNodeCramfs'</span><span class="p">,</span> <span class="s">'GetNodeSlicesy'</span><span class="p">,</span>
181 <span class="s">'GetInterfaceKey'</span><span class="p">,</span> <span class="s">'GetSliceInitscript'</span><span class="p">,</span> <span class="s">'SetNodeCPUm'</span><span class="p">,</span> <span class="s">'SetSliceArch'</span><span class="p">,</span>
182 <span class="s">'SetNodeLoad'</span><span class="p">,</span> <span class="s">'SetNodeResponse'</span><span class="p">,</span> <span class="s">'GetSliceSliverHMAC'</span><span class="p">,</span> <span class="s">'GetNodeBWw'</span><span class="p">,</span>
183 <span class="s">'GetNodeRegion'</span><span class="p">,</span> <span class="s">'SetNodeMEMy'</span><span class="p">,</span> <span class="s">'GetNodeASType'</span><span class="p">,</span> <span class="s">'SetNodePldistro'</span><span class="p">,</span>
184 <span class="s">'GetSliceArch'</span><span class="p">,</span> <span class="s">'GetNodeCountry'</span><span class="p">,</span> <span class="s">'SetSliceOmfControl'</span><span class="p">,</span> <span class="s">'GetNodeHrn'</span><span class="p">,</span>
185 <span class="s">'GetNodeCity'</span><span class="p">,</span> <span class="s">'SetInterfaceAlias'</span><span class="p">,</span> <span class="s">'GetNodeBW'</span><span class="p">,</span> <span class="s">'GetNodePldistro'</span><span class="p">,</span>
186 <span class="s">'GetSlicePldistro'</span><span class="p">,</span> <span class="s">'SetNodeASNumber'</span><span class="p">,</span> <span class="s">'GetSliceHmac'</span><span class="p">,</span> <span class="s">'SetSliceHmac'</span><span class="p">,</span>
187 <span class="s">'GetNodeMEM'</span><span class="p">,</span> <span class="s">'GetNodeASNumber'</span><span class="p">,</span> <span class="s">'GetInterfaceAlias'</span><span class="p">,</span> <span class="s">'GetSliceVref'</span><span class="p">,</span>
188 <span class="s">'GetNodeArch'</span><span class="p">,</span> <span class="s">'GetSliceSshKey'</span><span class="p">,</span> <span class="s">'GetInterfaceKey4'</span><span class="p">,</span> <span class="s">'GetInterfaceKey2'</span><span class="p">,</span>
189 <span class="s">'GetInterfaceKey3'</span><span class="p">,</span> <span class="s">'GetInterfaceKey1'</span><span class="p">,</span> <span class="s">'GetInterfaceBackdoor'</span><span class="p">,</span>
190 <span class="s">'GetInterfaceIfname'</span><span class="p">,</span> <span class="s">'SetSliceSliverHMAC'</span><span class="p">,</span> <span class="s">'SetNodeReliability'</span><span class="p">,</span>
191 <span class="s">'GetNodeCPU'</span><span class="p">,</span> <span class="s">'SetPersonShowconf'</span><span class="p">,</span> <span class="s">'SetNodeExtensions'</span><span class="p">,</span> <span class="s">'SetNodeCPUy'</span><span class="p">,</span>
192 <span class="s">'SetNodeCPUw'</span><span class="p">,</span> <span class="s">'GetNodeResponsew'</span><span class="p">,</span> <span class="s">'SetNodeResponsey'</span><span class="p">,</span> <span class="s">'GetInterfaceSens'</span><span class="p">,</span>
193 <span class="s">'SetNodeResponsew'</span><span class="p">,</span> <span class="s">'GetNodeResponsey'</span><span class="p">,</span> <span class="s">'GetNodeReliability'</span><span class="p">,</span>
194 <span class="s">'GetNodeReliabilitym'</span><span class="p">,</span> <span class="s">'SetNodeResponsem'</span><span class="p">,</span> <span class="s">'SetInterfaceDriver'</span><span class="p">,</span>
195 <span class="s">'GetInterfaceSecurityMode'</span><span class="p">,</span> <span class="s">'SetNodeDeployment'</span><span class="p">,</span> <span class="s">'SetNodeReliabilitym'</span><span class="p">,</span>
196 <span class="s">'GetNodeFcdistro'</span><span class="p">,</span> <span class="s">'SetInterfaceFreq'</span><span class="p">,</span> <span class="s">'GetInterfaceNw'</span><span class="p">,</span>
197 <span class="s">'SetNodeReliabilityy'</span><span class="p">,</span> <span class="s">'SetNodeReliabilityw'</span><span class="p">,</span> <span class="s">'GetInterfaceIwconfig'</span><span class="p">,</span>
198 <span class="s">'SetSlicePldistro'</span><span class="p">,</span> <span class="s">'SetSliceSshKey'</span><span class="p">,</span> <span class="s">'GetNodeDeployment'</span><span class="p">,</span>
199 <span class="s">'GetInterfaceChannel'</span><span class="p">,</span> <span class="s">'SetInterfaceKey2'</span><span class="p">,</span> <span class="s">'SetInterfaceKey3'</span><span class="p">,</span>
200 <span class="s">'SetInterfaceKey1'</span><span class="p">,</span> <span class="s">'SetInterfaceKey4'</span><span class="p">])</span>
202 <span class="n">_required_methods</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
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">"PLE"</span><span class="p">):</span>
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>
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">'session'</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">'password'</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">'anonymous'</span><span class="p">)</span>
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">'hostname'</span><span class="p">:</span><span class="n">hostname</span><span class="p">}</span>
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">"https"</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>
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">'https://</span><span class="si">%s%s</span><span class="s">'</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">'User-agent'</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>
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>
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>
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">'planetlab::Node'</span><span class="p">,</span> <span class="s">'persist_blacklist'</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>
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>
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>
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>
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">"Unsupported REQUIRED methods: </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span>
271 <span class="s">", "</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>
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">"Unsupported EXPECTED methods: </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span>
276 <span class="s">", "</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>
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>
284 <span class="k">return</span> <span class="bp">True</span>
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">"~"</span><span class="p">),</span> <span class="s">".nepi"</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">"plblacklist.txt"</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">'r'</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">'node_id'</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">'node_id'</span><span class="p">])</span>
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>
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">'shortname'</span><span class="p">,</span><span class="s">'peername'</span><span class="p">,</span><span class="s">'peer_id'</span><span class="p">])</span>
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">'shortname'</span><span class="p">],</span> <span class="n">peer</span><span class="p">[</span><span class="s">'peer_id'</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>
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">'peername'</span><span class="p">],</span> <span class="n">peer</span><span class="p">[</span><span class="s">'peer_id'</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>
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">'peer_id'</span><span class="p">],</span> <span class="n">peer</span><span class="p">[</span><span class="s">'shortname'</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>
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>
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">"""</span>
331 <span class="sd"> Returns detailed information on a given node's flavour,</span>
332 <span class="sd"> i.e. its base installation.</span>
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"> 'arch', 'pldistro', 'fcdistro', 'deployment', 'extensions'</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>
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"> """</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">"Node must be either a non-unicode string or an int"</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>
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">"""</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>
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>
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"> """</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>
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">'filters'</span><span class="p">,{})</span>
390 <span class="k">if</span> <span class="s">'peer'</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">'peer'</span><span class="p">)</span>
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>
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">'__iter__'</span><span class="p">):</span>
396 <span class="c"># we can'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>
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>
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>
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>
419 <span class="n">filters</span><span class="p">[</span><span class="s">'peer_id'</span><span class="p">]</span> <span class="o">=</span> <span class="n">peer_filter</span>
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>
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>
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>
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>
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">'filters'</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>
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>
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">'filters'</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>
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>
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">'filters'</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>
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>
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">'filters'</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>
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>
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>
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>
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>
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">'node_ids'</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="s">'node_ids'</span><span class="p">]</span>
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>
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">'tagname'</span><span class="p">,</span><span class="s">'value'</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>
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">'slice_id'</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">'slice_id'</span><span class="p">]</span>
527 <span class="c"># If it wasn't found, don't remember this failure, keep trying</span>
528 <span class="k">return</span> <span class="n">slice_id</span>
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">'vsys_vnet'</span><span class="p">,</span>
534 <span class="n">fields</span><span class="o">=</span><span class="p">(</span><span class="s">'value'</span><span class="p">,))</span>
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">'value'</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>
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>
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>
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>
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>
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>
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>
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">'PlanetlabNode'</span><span class="p">,</span> <span class="s">'persist_blacklist'</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">'hostname'</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">'hostname'</span><span class="p">])</span>
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">"~"</span><span class="p">),</span> <span class="s">".nepi"</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">"plblacklist.txt"</span><span class="p">)</span>
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">'w'</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">"</span><span class="si">%s</span><span class="se">\n</span><span class="s">"</span> <span class="o">%</span> <span class="n">host</span><span class="p">)</span>
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">""" </span>
582 <span class="sd"> .. note::</span>
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>
587 <span class="sd"> """</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>
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">""" Get existing PLCAPI instance</span>
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. "www.planet-lab.eu")</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"> """</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>
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">""" Create an PLCAPI instance</span>
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. "www.planet-lab.eu")</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"> """</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>
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">""" Hash the credentials in order to create a key</span>
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>
648 <span class="sd"> """</span>
649 <span class="n">skey</span> <span class="o">=</span> <span class="s">""</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>
656 <div class="clearer"></div>
658 <div class="related">
661 <li class="right" style="margin-right: 10px">
662 <a href="../../../../genindex.html" title="General Index"
665 <a href="../../../../py-modindex.html" title="Python Module Index"
667 <li><a href="../../../../index.html">NEPI 3.0 documentation</a> »</li>
668 <li><a href="../../../index.html" >Module code</a> »</li>
672 © Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
673 Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.