X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=emuvim%2Fapi%2Fzerorpcapi.py;fp=emuvim%2Fapi%2Fzerorpcapi.py;h=0000000000000000000000000000000000000000;hb=3eef9fde234a4379d80e0435bac9ce650407a895;hp=59b960c4af8779d22434864fe9831bb01f391b98;hpb=a38de012a7a59661484805036eb9cce3c5cddf16;p=osm%2Fvim-emu.git diff --git a/emuvim/api/zerorpcapi.py b/emuvim/api/zerorpcapi.py deleted file mode 100755 index 59b960c..0000000 --- a/emuvim/api/zerorpcapi.py +++ /dev/null @@ -1,128 +0,0 @@ -""" -Distributed Cloud Emulator (dcemulator) -(c) 2015 by Manuel Peuster -""" - -import logging -import threading -import zerorpc - -logging.basicConfig(level=logging.INFO) - - -class ZeroRpcApiEndpoint(object): - """ - Simple API endpoint that offers a zerorpc-based - interface. This interface will be used by the - default command line client. - It can be used as a reference to implement - REST interfaces providing the same semantics, - like e.g. OpenStack compute API. - """ - - def __init__(self, listenip, port): - self.dcs = {} - self.ip = listenip - self.port = port - logging.debug("Created API endpoint %s(%s:%d)" % ( - self.__class__.__name__, self.ip, self.port)) - - def connectDatacenter(self, dc): - self.dcs[dc.label] = dc - logging.info("Connected DC(%s) to API endpoint %s(%s:%d)" % ( - dc.label, self.__class__.__name__, self.ip, self.port)) - - def start(self): - thread = threading.Thread(target=self._api_server_thread, args=()) - thread.daemon = True - thread.start() - logging.debug("Started API endpoint %s(%s:%d)" % ( - self.__class__.__name__, self.ip, self.port)) - - def _api_server_thread(self): - s = zerorpc.Server(MultiDatacenterApi(self.dcs)) - s.bind("tcp://%s:%d" % (self.ip, self.port)) - s.run() - - -class MultiDatacenterApi(object): - """ - Just pass through the corresponding request to the - selected data center. Do not implement provisioning - logic here because will will have multiple API - endpoint implementations at the end. - """ - - def __init__(self, dcs): - self.dcs = dcs - - def compute_action_start(self, dc_label, compute_name, image, command, network): - """ - Start a new compute instance: A docker container - :param dc_label: name of the DC - :param compute_name: compute container name - :param image: image name - :param command: command to execute - :param network: - :return: networks list({"ip": "10.0.0.254/8"}, {"ip": "11.0.0.254/24"}) - """ - # TODO what to return UUID / given name / internal name ? - logging.debug("RPC CALL: compute start") - 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