X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=emuvim%2Fapi%2Fzerorpcapi.py;h=fd814b323ac20f5dbae5c632c0fc9e24170d64b8;hb=4854f59e1bc2ea4d5b3495880940b52f6823affe;hp=e00ecb999614218b3d562fd4e3c01b84a1707cd0;hpb=4e98b6362438ec5ce0cfec4b497fa24620efe212;p=osm%2Fvim-emu.git diff --git a/emuvim/api/zerorpcapi.py b/emuvim/api/zerorpcapi.py old mode 100644 new mode 100755 index e00ecb9..fd814b3 --- a/emuvim/api/zerorpcapi.py +++ b/emuvim/api/zerorpcapi.py @@ -7,7 +7,7 @@ import logging import threading import zerorpc -logging.basicConfig(level=logging.DEBUG) +logging.basicConfig(level=logging.INFO) class ZeroRpcApiEndpoint(object): @@ -28,9 +28,9 @@ class ZeroRpcApiEndpoint(object): self.__class__.__name__, self.ip, self.port)) def connectDatacenter(self, dc): - self.dcs[dc.name] = dc + self.dcs[dc.label] = dc logging.info("Connected DC(%s) to API endpoint %s(%s:%d)" % ( - dc.name, self.__class__.__name__, self.ip, self.port)) + dc.label, self.__class__.__name__, self.ip, self.port)) def start(self): thread = threading.Thread(target=self._api_server_thread, args=()) @@ -56,22 +56,65 @@ class MultiDatacenterApi(object): def __init__(self, dcs): self.dcs = dcs - def compute_action_start(self, dc_name, compute_name): + def compute_action_start(self, dc_label, compute_name, image, command, network): + # network e.g. {"ip": "10.0.0.254/8"} # TODO what to return UUID / given name / internal name ? logging.debug("RPC CALL: compute start") - if dc_name in self.dcs: - return self.dcs[dc_name].addCompute(compute_name) - - def compute_action_stop(self, dc_name, compute_name): - logging.info("RPC CALL: compute stop") - if dc_name in self.dcs: - return self.dcs[dc_name].removeCompute(compute_name) - - def compute_list(self, dc_name): - logging.info("RPC CALL: compute list") - if dc_name in self.dcs: - return [(c.name, c.IP()) for c in self.dcs[dc_name].listCompute()] - - def compute_status(self, dc_name, compute_name): - logging.info("RPC CALL: compute status") - # TODO implement + try: + c = self.dcs.get(dc_label).startCompute( + compute_name, image=image, command=command, network=network) + return str(c.name) + except Exception as ex: + logging.exception("RPC error.") + return ex.message + + def compute_action_stop(self, dc_label, compute_name): + logging.debug("RPC CALL: compute stop") + try: + return self.dcs.get(dc_label).stopCompute(compute_name) + except Exception as ex: + logging.exception("RPC error.") + return ex.message + + def compute_list(self, dc_label): + logging.debug("RPC CALL: compute list") + try: + if dc_label is None: + # return list with all compute nodes in all DCs + all_containers = [] + for dc in self.dcs.itervalues(): + all_containers += dc.listCompute() + return [(c.name, c.getStatus()) + for c in all_containers] + else: + # return list of compute nodes for specified DC + return [(c.name, c.getStatus()) + for c in self.dcs.get(dc_label).listCompute()] + except Exception as ex: + logging.exception("RPC error.") + return ex.message + + def compute_status(self, dc_label, compute_name): + logging.debug("RPC CALL: compute status") + try: + return self.dcs.get( + dc_label).containers.get(compute_name).getStatus() + except Exception as ex: + logging.exception("RPC error.") + return ex.message + + def datacenter_list(self): + logging.debug("RPC CALL: datacenter list") + try: + return [d.getStatus() for d in self.dcs.itervalues()] + except Exception as ex: + logging.exception("RPC error.") + return ex.message + + def datacenter_status(self, dc_label): + logging.debug("RPC CALL: datacenter status") + try: + return self.dcs.get(dc_label).getStatus() + except Exception as ex: + logging.exception("RPC error.") + return ex.message