- for nsr_item in nsrs_list:
- service = self.db.get_one("nsrs", {"_id": nsr_item["nsrId"]})
- indata_ns = {}
- indata_ns = service["instantiate_params"]
- indata_ns["lcmOperationType"] = operation
- indata_ns["nsInstanceId"] = service["_id"]
- # Including netslice_id in the ns instantiate Operation
- indata_ns["netsliceInstanceId"] = nsiInstanceId
- del indata_ns["key-pair-ref"]
- nsi_NsLcmOpTopic = NsLcmOpTopic(self.db, self.fs, self.msg)
- # Creating NS_LCM_OP with the flag slice_object=True to not trigger the service instantiation
- # message via kafka bus
- nslcmop = nsi_NsLcmOpTopic.new(rollback, session, indata_ns, kwargs, headers, force, slice_object=True)
- nslcmops.append(nslcmop)
+ # nslcmops_item = None
+ for index, nsr_item in enumerate(nsrs_list):
+ nsi = None
+ if nsr_item.get("shared"):
+ _filter = {"_admin.nsrs-detailed-list.ANYINDEX.shared": True,
+ "_admin.nsrs-detailed-list.ANYINDEX.nsrId": nsr_item["nsrId"],
+ "_admin.nsrs-detailed-list.ANYINDEX.nslcmop_instantiate.ne": None,
+ "_id.ne": nsiInstanceId}
+
+ nsi = self.db.get_one("nsis", _filter, fail_on_empty=False, fail_on_more=False)
+ # looks the first nsi fulfilling the conditions but not being the current NSIR
+ if nsi:
+ nsi_admin_shared = nsi["_admin"]["nsrs-detailed-list"]
+ for nsi_nsr_item in nsi_admin_shared:
+ if nsi_nsr_item["nsd-id"] == nsr_item["nsd-id"] and nsi_nsr_item["shared"]:
+ self.add_shared_nsr_2vld(nsir, nsr_item)
+ nslcmops.append(nsi_nsr_item["nslcmop_instantiate"])
+ _update = {"_admin.nsrs-detailed-list.{}".format(index): nsi_nsr_item}
+ self.db.set_one("nsis", {"_id": nsir["_id"]}, _update)
+ break
+ # continue to not create nslcmop since nsrs is shared and nsrs was created
+ continue
+ else:
+ self.add_shared_nsr_2vld(nsir, nsr_item)
+
+ try:
+ service = self.db.get_one("nsrs", {"_id": nsr_item["nsrId"]})
+ indata_ns = {}
+ indata_ns = service["instantiate_params"]
+ indata_ns["lcmOperationType"] = operation
+ indata_ns["nsInstanceId"] = service["_id"]
+ # Including netslice_id in the ns instantiate Operation
+ indata_ns["netsliceInstanceId"] = nsiInstanceId
+ del indata_ns["key-pair-ref"]
+ # 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)
+ nslcmops.append(nslcmop)
+ if operation == "terminate":
+ nslcmop = None
+ _update = {"_admin.nsrs-detailed-list.{}.nslcmop_instantiate".format(index): nslcmop}
+ self.db.set_one("nsis", {"_id": nsir["_id"]}, _update)
+ except (DbException, EngineException) as e:
+ if e.http_code == HTTPStatus.NOT_FOUND:
+ self.logger.info("HTTPStatus.NOT_FOUND")
+ pass
+ else:
+ raise