Bug 1954 fixed: I added the <OSM> parameter as one of the valid ones that will be...
[osm/NBI.git] / osm_nbi / instance_topics.py
index 16bd406..8cc7106 100644 (file)
@@ -38,6 +38,7 @@ from osm_nbi.base_topic import (
     get_iterable,
     deep_get,
     increment_ip_mac,
+    update_descriptor_usage_state,
 )
 from yaml import safe_dump
 from osm_common.dbbase import DbException
@@ -169,9 +170,14 @@ class NsrTopic(BaseTopic):
         ns_request, member_vnf_index=None, vdu_id=None, kdu_name=None, descriptor=None
     ):
         """
-        Get and format user additional params for NS or VNF
+        Get and format user additional params for NS or VNF.
+        The vdu_id and kdu_name params are mutually exclusive! If none of them are given, then the method will
+        exclusively search for the VNF/NS LCM additional params.
+
         :param ns_request: User instantiation additional parameters
         :param member_vnf_index: None for extract NS params, or member_vnf_index to extract VNF params
+        :vdu_id: VDU's ID against which we want to format the additional params
+        :kdu_name: KDU's name against which we want to format the additional params
         :param descriptor: If not None it check that needed parameters of descriptor are supplied
         :return: tuple with a formatted copy of additional params or None if not supplied, plus other parameters
         """
@@ -255,6 +261,9 @@ class NsrTopic(BaseTopic):
             if kdu_name:
                 additional_params = json.dumps(additional_params)
 
+        # Select the VDU ID, KDU name or NS/VNF ID, depending on the method's call intent
+        selector = vdu_id if vdu_id else kdu_name if kdu_name else descriptor.get("id")
+
         if descriptor:
             for df in descriptor.get("df", []):
                 # check that enough parameters are supplied for the initial-config-primitive
@@ -269,10 +278,13 @@ class NsrTopic(BaseTopic):
                         for config in df["lcm-operations-configuration"][
                             "operate-vnf-op-config"
                         ].get("day1-2", []):
-                            for primitive in get_iterable(
-                                config.get("initial-config-primitive")
-                            ):
-                                initial_primitives.append(primitive)
+                            # Verify the target object (VNF|NS|VDU|KDU) where we need to populate 
+                            # the params with the additional ones given by the user
+                            if config.get("id") == selector:
+                                for primitive in get_iterable(
+                                    config.get("initial-config-primitive")
+                                ):
+                                    initial_primitives.append(primitive)
                 else:
                     initial_primitives = deep_get(
                         descriptor, ("ns-configuration", "initial-config-primitive")
@@ -287,6 +299,7 @@ class NsrTopic(BaseTopic):
                                 "<rw_mgmt_ip>",
                                 "<VDU_SCALE_INFO>",
                                 "<ns_config_info>",
+                                "<OSM>"
                             ):
                                 continue
                             if (
@@ -378,9 +391,13 @@ class NsrTopic(BaseTopic):
                 )
                 self._add_vnfr_to_db(vnfr_descriptor, rollback, session)
                 nsr_descriptor["constituent-vnfr-ref"].append(vnfr_descriptor["id"])
+                step = "Updating VNFD usageState"
+                update_descriptor_usage_state(vnfd, "vnfds", self.db)
 
             step = "creating nsr at database"
             self._add_nsr_to_db(nsr_descriptor, rollback, session)
+            step = "Updating NSD usageState"
+            update_descriptor_usage_state(nsd, "nsds", self.db)
 
             step = "creating nsr temporal folder"
             self.fs.mkdir(nsr_id)
@@ -1602,7 +1619,7 @@ class NsLcmOpTopic(BaseTopic):
         if wim_account in wim_accounts:
             return
         try:
-            db_filter = self._get_project_filter(session, write=False, show_all=True)
+            db_filter = self._get_project_filter(session)
             db_filter["_id"] = wim_account
             self.db.get_one("wim_accounts", db_filter)
         except Exception: