From 90fbc9c587e8270b20f06c9dce14de55d92df551 Mon Sep 17 00:00:00 2001 From: Felipe Vicens Date: Thu, 6 Jun 2019 01:03:00 +0200 Subject: [PATCH] Fix [Bug 675] User is able to delete NS instance before deleting NetworkSlice intance Change-Id: I232c449d363d014664ea187f46df190871c3b26f Signed-off-by: Felipe Vicens --- osm_nbi/instance_topics.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/osm_nbi/instance_topics.py b/osm_nbi/instance_topics.py index 48503a9..100c9b4 100644 --- a/osm_nbi/instance_topics.py +++ b/osm_nbi/instance_topics.py @@ -763,6 +763,15 @@ class NsLcmOpTopic(BaseTopic): :param headers: http request headers :return: id of the nslcmops """ + def check_if_nsr_is_not_slice_member(session, nsr_id): + nsis = None + db_filter = self._get_project_filter(session) + db_filter["_admin.nsrs-detailed-list.ANYINDEX.nsrId"] = nsr_id + nsis = self.db.get_one("nsis", db_filter, fail_on_empty=False, fail_on_more=False) + if nsis: + raise EngineException("The NS instance {} cannot be terminate because is used by the slice {}".format( + nsr_id, nsis["_id"]), http_code=HTTPStatus.CONFLICT) + try: # Override descriptor with query string kwargs self._update_input_with_kwargs(indata, kwargs) @@ -776,6 +785,8 @@ class NsLcmOpTopic(BaseTopic): nsr = self.db.get_one("nsrs", _filter) # initial checking + if operation == "terminate" and slice_object is False: + check_if_nsr_is_not_slice_member(session, nsr["_id"]) if not nsr["_admin"].get("nsState") or nsr["_admin"]["nsState"] == "NOT_INSTANTIATED": if operation == "terminate" and indata.get("autoremove"): # NSR must be deleted -- 2.17.1