+ return _retry(self.mcapi.UpdateSlice)(self.auth, sliceIdOrName, kw)
+
+ def StartMulticall(self):
+ self.threadlocal.mc = xmlrpclib.MultiCall(self.mcapi)
+
+ def FinishMulticall(self):
+ mc = self.threadlocal.mc
+ del self.threadlocal.mc
+ return _retry(mc)()
+
+ def GetSliceNodes(self, slicename):
+ return self.GetSlices(slicename, ['node_ids'])[0]['node_ids']
+
+ def AddSliceNodes(self, slicename, nodes = None):
+ self.UpdateSlice(slicename, nodes = nodes)
+
+ def GetNodeInfo(self, node_id):
+ self.StartMulticall()
+ info = self.GetNodes(node_id)
+ tags = self.GetNodeTags(node_id=node_id, fields=('tagname','value'))
+ info, tags = self.FinishMulticall()
+ return info, tags
+
+ def GetSliceId(self, slicename):
+ slice_id = None
+ slices = self.GetSlices(slicename, fields=('slice_id',))
+ if slices:
+ slice_id = slices[0]['slice_id']
+ # If it wasn't found, don't remember this failure, keep trying
+ return slice_id
+
+ def GetSliceVnetSysTag(self, slicename):
+ slicetags = self.GetSliceTags(
+ name = slicename,
+ tagname = 'vsys_vnet',
+ fields=('value',))
+ if slicetags:
+ return slicetags[0]['value']
+ else:
+ return None
+
+def plcapi(auth_user, auth_string, plc_host, plc_url, proxy):
+ api = None
+ if auth_user:
+ api = PLCAPI(
+ username = auth_user,
+ password = auth_string,
+ hostname = plc_host,
+ urlpattern = plc_url,
+ proxy = proxy
+ )
+ else:
+ # anonymous access - may not be enough for much
+ api = PLCAPI()
+ return api
+