X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FNBI.git;a=blobdiff_plain;f=osm_nbi%2Finstance_topics.py;h=809578ed25755dbd3f0b60fa69b77569c5743317;hp=100c9b4718b7a057d14e9868aca89a0bdf85f94a;hb=08ddb14b077121ffced28e41c441fef31b6bb6a1;hpb=90fbc9c587e8270b20f06c9dce14de55d92df551;ds=sidebyside diff --git a/osm_nbi/instance_topics.py b/osm_nbi/instance_topics.py index 100c9b4..809578e 100644 --- a/osm_nbi/instance_topics.py +++ b/osm_nbi/instance_topics.py @@ -31,6 +31,7 @@ __author__ = "Alfonso Tierno " class NsrTopic(BaseTopic): topic = "nsrs" topic_msg = "ns" + schema_new = ns_instantiate def __init__(self, db, fs, msg): BaseTopic.__init__(self, db, fs, msg) @@ -53,6 +54,7 @@ class NsrTopic(BaseTopic): def format_on_new(content, project_id=None, make_public=False): BaseTopic.format_on_new(content, project_id=project_id, make_public=make_public) content["_admin"]["nsState"] = "NOT_INSTANTIATED" + return None def check_conflict_on_del(self, session, _id, db_content): """ @@ -180,6 +182,7 @@ class NsrTopic(BaseTopic): """ try: + step = "validating input parameters" ns_request = self._remove_envelop(indata) # Override descriptor with query string kwargs self._update_input_with_kwargs(ns_request, kwargs) @@ -226,7 +229,7 @@ class NsrTopic(BaseTopic): "id": nsr_id, "_id": nsr_id, # "input-parameter": xpath, value, - "ssh-authorized-key": ns_request.get("key-pair-ref"), # TODO remove + "ssh-authorized-key": ns_request.get("ssh_keys"), # TODO remove } ns_request["nsr_id"] = nsr_id # Create vld @@ -360,7 +363,7 @@ class NsrTopic(BaseTopic): member_vnf["vnfd-id-ref"], member_vnf["member-vnf-index"]) # add at database - BaseTopic.format_on_new(vnfr_descriptor, session["project_id"], make_public=session["public"]) + self.format_on_new(vnfr_descriptor, session["project_id"], make_public=session["public"]) self.db.create("vnfrs", vnfr_descriptor) rollback.append({"topic": "vnfrs", "_id": vnfr_id}) nsr_descriptor["constituent-vnfr-ref"].append(vnfr_id) @@ -373,12 +376,12 @@ class NsrTopic(BaseTopic): step = "creating nsr temporal folder" self.fs.mkdir(nsr_id) - return nsr_id + return nsr_id, None + except ValidationError as e: # TODO remove try Except, it is captured at nbi.py + raise EngineException(e, HTTPStatus.UNPROCESSABLE_ENTITY) except Exception as e: self.logger.exception("Exception {} at NsrTopic.new()".format(e), exc_info=True) raise EngineException("Error {}: {}".format(step, e)) - except ValidationError as e: - raise EngineException(e, HTTPStatus.UNPROCESSABLE_ENTITY) def edit(self, session, _id, indata=None, kwargs=None, content=None): raise EngineException("Method edit called directly", HTTPStatus.INTERNAL_SERVER_ERROR) @@ -809,8 +812,8 @@ class NsLcmOpTopic(BaseTopic): rollback.append({"topic": "nslcmops", "_id": _id}) if not slice_object: self.msg.write("ns", operation, nslcmop_desc) - return _id - except ValidationError as e: + return _id, None + except ValidationError as e: # TODO remove try Except, it is captured at nbi.py raise EngineException(e, HTTPStatus.UNPROCESSABLE_ENTITY) # except DbException as e: # raise EngineException("Cannot get ns_instance '{}': {}".format(e), HTTPStatus.NOT_FOUND) @@ -987,12 +990,12 @@ class NsiTopic(BaseTopic): """ try: + step = "" slice_request = self._remove_envelop(indata) # Override descriptor with query string kwargs self._update_input_with_kwargs(slice_request, kwargs) self._validate_input_new(slice_request, session["force"]) - step = "" # look for nstd step = "getting nstd id='{}' from database".format(slice_request.get("nstId")) _filter = self._get_project_filter(session) @@ -1079,14 +1082,15 @@ class NsiTopic(BaseTopic): # Is the nss shared and instantiated? _filter["_admin.nsrs-detailed-list.ANYINDEX.shared"] = True _filter["_admin.nsrs-detailed-list.ANYINDEX.nsd-id"] = service["nsd-ref"] + _filter["_admin.nsrs-detailed-list.ANYINDEX.nss-id"] = service["id"] nsi = self.db.get_one("nsis", _filter, fail_on_empty=False, fail_on_more=False) - if nsi and service.get("is-shared-nss"): nsrs_detailed_list = nsi["_admin"]["nsrs-detailed-list"] for nsrs_detailed_item in nsrs_detailed_list: if nsrs_detailed_item["nsd-id"] == service["nsd-ref"]: - _id_nsr = nsrs_detailed_item["nsrId"] - break + if nsrs_detailed_item["nss-id"] == service["id"]: + _id_nsr = nsrs_detailed_item["nsrId"] + break for netslice_subnet in nsi["_admin"]["netslice-subnet"]: if netslice_subnet["nss-id"] == service["id"]: indata_ns = netslice_subnet @@ -1101,7 +1105,8 @@ class NsiTopic(BaseTopic): indata_ns["nsName"] = slice_request.get("nsiName") + "." + service["id"] indata_ns["vimAccountId"] = slice_request.get("vimAccountId") indata_ns["nsDescription"] = service["description"] - indata_ns["key-pair-ref"] = slice_request.get("key-pair-ref") + if slice_request.get("ssh_keys"): + indata_ns["ssh_keys"] = slice_request.get("ssh_keys") if ns_params: for ns_param in ns_params: @@ -1112,9 +1117,9 @@ class NsiTopic(BaseTopic): break # Creates Nsr objects - _id_nsr = self.nsrTopic.new(rollback, session, indata_ns, kwargs, headers) + _id_nsr, _ = self.nsrTopic.new(rollback, session, indata_ns, kwargs, headers) nsrs_item = {"nsrId": _id_nsr, "shared": service.get("is-shared-nss"), "nsd-id": service["nsd-ref"], - "nslcmop_instantiate": None} + "nss-id": service["id"], "nslcmop_instantiate": None} indata_ns["nss-id"] = service["id"] nsrs_list.append(nsrs_item) nsi_netslice_subnet.append(indata_ns) @@ -1129,8 +1134,8 @@ class NsiTopic(BaseTopic): # Creating the entry in the database self.db.create("nsis", nsi_descriptor) rollback.append({"topic": "nsis", "_id": nsi_id}) - return nsi_id - except Exception as e: + return nsi_id, None + except Exception as e: # TODO remove try Except, it is captured at nbi.py self.logger.exception("Exception {} at NsiTopic.new()".format(e), exc_info=True) raise EngineException("Error {}: {}".format(step, e)) except ValidationError as e: @@ -1292,11 +1297,10 @@ class NsiLcmOpTopic(BaseTopic): indata_ns["nsInstanceId"] = service["_id"] # Including netslice_id in the ns instantiate Operation indata_ns["netsliceInstanceId"] = netsliceInstanceId - del indata_ns["key-pair-ref"] - # Creating NS_LCM_OP with the flag slice_object=True to not trigger the service instantiation + # Creating NS_LCM_OP with the flag slice_object=True to not trigger the service instantiation # message via kafka bus - nslcmop = self.nsi_NsLcmOpTopic.new(rollback, session, indata_ns, kwargs, headers, - slice_object=True) + nslcmop, _ = self.nsi_NsLcmOpTopic.new(rollback, session, indata_ns, kwargs, headers, + slice_object=True) nslcmops.append(nslcmop) if operation == "terminate": nslcmop = None @@ -1318,7 +1322,7 @@ class NsiLcmOpTopic(BaseTopic): _id = self.db.create("nsilcmops", nsilcmop_desc) rollback.append({"topic": "nsilcmops", "_id": _id}) self.msg.write("nsi", operation, nsilcmop_desc) - return _id + return _id, None except ValidationError as e: raise EngineException(e, HTTPStatus.UNPROCESSABLE_ENTITY)