X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FNBI.git;a=blobdiff_plain;f=osm_nbi%2Fnbi.py;h=796558deef659a31bf7190f4961d157c8cf60f0d;hp=cb2404558857b0fc24fe8944a149fc761fcdb5ce;hb=f759d820955aab196d3bfbbd1b3d0a258ae125ae;hpb=b62b7acd1c12e971b6e13d4905d478df8fd3c69f diff --git a/osm_nbi/nbi.py b/osm_nbi/nbi.py index cb24045..796558d 100644 --- a/osm_nbi/nbi.py +++ b/osm_nbi/nbi.py @@ -68,8 +68,8 @@ URL: /osm GET POST /ns_lcm_op_occs 5 5 / 5 5 5 TO BE COMPLETED 5 5 - /vnfrs O - / O + /vnf_instances (also vnfrs for compatibility) O + / O /subscriptions 5 5 / 5 X /admin/v1 @@ -216,7 +216,7 @@ class Server(object): }, "ns_instances": {"METHODS": ("GET", "POST"), "": {"METHODS": ("GET", "DELETE"), - "scale": {"TODO": "POST"}, + "scale": {"METHODS": "POST"}, "terminate": {"METHODS": "POST"}, "instantiate": {"METHODS": "POST"}, "action": {"METHODS": "POST"}, @@ -228,6 +228,9 @@ class Server(object): "vnfrs": {"METHODS": ("GET"), "": {"METHODS": ("GET")} }, + "vnf_instances": {"METHODS": ("GET"), + "": {"METHODS": ("GET")} + }, } }, } @@ -616,7 +619,8 @@ class Server(object): _format = None method = "DONE" engine_item = None - rollback = None + rollback = [] + session = None try: if not topic or not version or not item: raise NbiException("URL must contain at least 'topic/version/item'", HTTPStatus.METHOD_NOT_ALLOWED) @@ -656,7 +660,7 @@ class Server(object): engine_item = "nsrs" if item == "ns_lcm_op_occs": engine_item = "nslcmops" - if item == "vnfrs": + if item == "vnfrs" or item == "vnf_instances": engine_item = "vnfrs" if engine_item == "vims": # TODO this is for backward compatibility, it will remove in the future engine_item = "vim_accounts" @@ -682,9 +686,8 @@ class Server(object): if item in ("ns_descriptors_content", "vnf_packages_content"): _id = cherrypy.request.headers.get("Transaction-Id") if not _id: - _id = self.engine.new_item(session, engine_item, {}, None, cherrypy.request.headers, + _id = self.engine.new_item(rollback, session, engine_item, {}, None, cherrypy.request.headers, force=force) - rollback = {"session": session, "item": engine_item, "_id": _id, "force": True} completed = self.engine.upload_content(session, engine_item, _id, indata, kwargs, cherrypy.request.headers) if completed: @@ -693,18 +696,17 @@ class Server(object): cherrypy.response.headers["Transaction-Id"] = _id outdata = {"id": _id} elif item == "ns_instances_content": - _id = self.engine.new_item(session, engine_item, indata, kwargs, force=force) - rollback = {"session": session, "item": engine_item, "_id": _id, "force": True} - self.engine.ns_operation(session, _id, "instantiate", {}, None) + _id = self.engine.new_item(rollback, session, engine_item, indata, kwargs, force=force) + self.engine.ns_operation(rollback, session, _id, "instantiate", indata, None) self._set_location_header(topic, version, item, _id) outdata = {"id": _id} elif item == "ns_instances" and item2: - _id = self.engine.ns_operation(session, _id, item2, indata, kwargs) + _id = self.engine.ns_operation(rollback, session, _id, item2, indata, kwargs) self._set_location_header(topic, version, "ns_lcm_op_occs", _id) outdata = {"id": _id} cherrypy.response.status = HTTPStatus.ACCEPTED.value else: - _id = self.engine.new_item(session, engine_item, indata, kwargs, cherrypy.request.headers, + _id = self.engine.new_item(rollback, session, engine_item, indata, kwargs, cherrypy.request.headers, force=force) self._set_location_header(topic, version, item, _id) outdata = {"id": _id} @@ -717,7 +719,8 @@ class Server(object): cherrypy.response.status = HTTPStatus.OK.value else: # len(args) > 1 if item == "ns_instances_content" and not force: - opp_id = self.engine.ns_operation(session, _id, "terminate", {"autoremove": True}, None) + opp_id = self.engine.ns_operation(rollback, session, _id, "terminate", {"autoremove": True}, + None) outdata = {"_id": opp_id} cherrypy.response.status = HTTPStatus.ACCEPTED.value else: @@ -747,11 +750,11 @@ class Server(object): cherrypy.response.status = e.http_code.value if hasattr(outdata, "close"): # is an open file outdata.close() - if rollback: + for rollback_item in rollback: try: - self.engine.del_item(**rollback) + self.engine.del_item(**rollback_item, session=session, force=True) except Exception as e2: - cherrypy.log("Rollback Exception {}: {}".format(rollback, e2)) + cherrypy.log("Rollback Exception {}: {}".format(rollback_item, e2)) error_text = str(e) if isinstance(e, MsgException): error_text = "{} has been '{}' but other modules cannot be informed because an error on bus".format(