Fix bug 731
[osm/NBI.git] / osm_nbi / instance_topics.py
index aba441f..8f2ac0d 100644 (file)
@@ -515,11 +515,13 @@ class NsLcmOpTopic(BaseTopic):
             # check vnf_member_index
             if indata.get("vnf_member_index"):
                 indata["member_vnf_index"] = indata.pop("vnf_member_index")    # for backward compatibility
-            if not indata.get("member_vnf_index"):
-                raise EngineException("Missing 'member_vnf_index' parameter")
-            vnfd = check_valid_vnf_member_index(indata["member_vnf_index"])
+            if indata.get("member_vnf_index"):
+                vnfd = check_valid_vnf_member_index(indata["member_vnf_index"])
+                descriptor_configuration = vnfd.get("vnf-configuration", {}).get("config-primitive")
+            else:  # use a NSD
+                descriptor_configuration = nsd.get("ns-configuration", {}).get("config-primitive")
             # check primitive
-            for config_primitive in get_iterable(vnfd.get("vnf-configuration", {}).get("config-primitive")):
+            for config_primitive in get_iterable(descriptor_configuration):
                 if indata["primitive"] == config_primitive["name"]:
                     # check needed primitive_params are provided
                     if indata.get("primitive_params"):
@@ -534,11 +536,11 @@ class NsLcmOpTopic(BaseTopic):
                                 paramd["name"], indata["primitive"]))
                     # check no extra primitive params are provided
                     if in_primitive_params_copy:
-                        raise EngineException("parameter/s '{}' not present at vnfd for primitive '{}'".format(
+                        raise EngineException("parameter/s '{}' not present at vnfd /nsd for primitive '{}'".format(
                             list(in_primitive_params_copy.keys()), indata["primitive"]))
                     break
             else:
-                raise EngineException("Invalid primitive '{}' is not present at vnfd".format(indata["primitive"]))
+                raise EngineException("Invalid primitive '{}' is not present at vnfd/nsd".format(indata["primitive"]))
         if operation == "scale":
             vnfd = check_valid_vnf_member_index(indata["scaleVnfData"]["scaleByStepData"]["member-vnf-index"])
             for scaling_group in get_iterable(vnfd.get("scaling-group-descriptor")):
@@ -1247,12 +1249,15 @@ class NsiLcmOpTopic(BaseTopic):
             for index, nsr_item in enumerate(nsrs_list):
                 nsi = None
                 if nsr_item.get("shared"):
-                    _filter["_admin.nsrs-detailed-list.ANYINDEX.shared"] = True,
+                    _filter["_admin.nsrs-detailed-list.ANYINDEX.shared"] = True
                     _filter["_admin.nsrs-detailed-list.ANYINDEX.nsrId"] = nsr_item["nsrId"]
                     _filter["_admin.nsrs-detailed-list.ANYINDEX.nslcmop_instantiate.ne"] = None
                     _filter["_id.ne"] = nsiInstanceId
-
                     nsi = self.db.get_one("nsis", _filter, fail_on_empty=False, fail_on_more=False)
+                    if operation == "terminate":
+                        _update = {"_admin.nsrs-detailed-list.{}.nslcmop_instantiate".format(index): None}
+                        self.db.set_one("nsis", {"_id": nsir["_id"]}, _update)
+                        
                     # looks the first nsi fulfilling the conditions but not being the current NSIR
                     if nsi:
                         nsi_admin_shared = nsi["_admin"]["nsrs-detailed-list"]