X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=emuvim%2Fapi%2Fzerorpcapi.py;h=28519c6b4cdf8a1aced1433b9e155b607f6a2b88;hb=7aae68563f4ca72f321bd264215f6a58dec6c346;hp=7be3f60076417fc6f6c75e014a6f8c00faf6e442;hpb=70baaf8cf227d70288c3e310f0ab6b344e66d4c0;p=osm%2Fvim-emu.git diff --git a/emuvim/api/zerorpcapi.py b/emuvim/api/zerorpcapi.py index 7be3f60..28519c6 100644 --- a/emuvim/api/zerorpcapi.py +++ b/emuvim/api/zerorpcapi.py @@ -11,6 +11,14 @@ logging.basicConfig(level=logging.DEBUG) 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 = {} @@ -38,20 +46,47 @@ class ZeroRpcApiEndpoint(object): 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_name, compute_name): - # TODO return UUID / IP ? + # TODO what to return UUID / given name / internal name ? logging.debug("RPC CALL: compute start") - if dc_name in self.dcs: - self.dcs[dc_name].addCompute(compute_name) + try: + return self.dcs.get(dc_name).startCompute(compute_name) + except Exception as ex: + logging.exception("RPC error.") + return ex.message def compute_action_stop(self, dc_name, compute_name): - logging.info("compute stop") - if dc_name in self.dcs: - self.dcs[dc_name].removeCompute(compute_name) + logging.info("RPC CALL: compute stop") + try: + return self.dcs.get(dc_name).stopCompute(compute_name) + except Exception as ex: + logging.exception("RPC error.") + return ex.message - def compute_list(self): - pass + def compute_list(self, dc_name): + logging.info("RPC CALL: compute list") + try: + return [(c.name, c.IP()) + for c in self.dcs.get(dc_name).listCompute()] + except Exception as ex: + logging.exception("RPC error.") + return ex.message + + def compute_status(self, dc_name, compute_name): + logging.info("RPC CALL: compute status") + try: + return self.dcs.get( + dc_name).containers.get(compute_name).getStatus() + except Exception as ex: + logging.exception("RPC error.") + return ex.message