X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Frest%2Fcompute.py;h=030055e44c1d6a96af68c86dbd96ba7e60e07fc2;hb=34566447ace17ef694334094140bf9feb115b715;hp=b935af8c05f03b281ed3dd4632c419fa50ba3597;hpb=79ef6aee3dc52f49d1261e40ec5f258fb4372a1e;p=osm%2Fvim-emu.git diff --git a/src/emuvim/api/rest/compute.py b/src/emuvim/api/rest/compute.py index b935af8..030055e 100755 --- a/src/emuvim/api/rest/compute.py +++ b/src/emuvim/api/rest/compute.py @@ -50,18 +50,45 @@ class ComputeStart(Resource): def put(self, dc_label, compute_name): logging.debug("API CALL: compute start") try: + #check if json data is a dict + data = request.json + if data is None: + data = {} + elif type(data) is not dict: + data = json.loads(request.json) + + network = data.get("network") + nw_list = self._parse_network(network) + image = data.get("image") + command = data.get("docker_command") - image = json.loads(request.json).get("image") - network = json.loads(request.json).get("network") - command = json.loads(request.json).get("docker_command") c = dcs.get(dc_label).startCompute( - compute_name, image= image, command= command, network= network) + compute_name, image= image, command= command, network= nw_list) # return docker inspect dict return c.getStatus(), 200 except Exception as ex: logging.exception("API error.") return ex.message, 500 + def _parse_network(self, network_str): + ''' + parse the options for all network interfaces of the vnf + :param network_str: (id=x,ip=x.x.x.x/x), ... + :return: list of dicts [{"id":x,"ip":"x.x.x.x/x"}, ...] + ''' + nw_list = list() + + # TODO make this more robust with regex check + if network_str is None : + return nw_list + + networks = network_str[1:-1].split('),(') + for nw in networks: + nw_dict = dict(tuple(e.split('=')) for e in nw.split(',')) + nw_list.append(nw_dict) + + return nw_list + class ComputeStop(Resource): global dcs @@ -79,10 +106,10 @@ class ComputeList(Resource): global dcs - def get(self, dc_label): + def get(self, dc_label=None): logging.debug("API CALL: compute list") try: - if dc_label == 'None': + if dc_label is None or dc_label == 'None': # return list with all compute nodes in all DCs all_containers = [] for dc in dcs.itervalues(): @@ -134,3 +161,5 @@ class DatacenterStatus(Resource): except Exception as ex: logging.exception("API error.") return ex.message, 500 + +