fix(FS): sync problems fixed syncing only the particular NSD and VNFD that the instan...
[osm/LCM.git] / osm_lcm / ns.py
index dc69449..6b82da9 100644 (file)
@@ -1696,9 +1696,6 @@ class NsLcm(LcmBase):
             # wait for any previous tasks in process
             await self.lcm_tasks.waitfor_related_HA('ns', 'nslcmops', nslcmop_id)
 
-            stage[1] = "Sync filesystem from database."
-            self.fs.sync()  # TODO, make use of partial sync, only for the needed packages
-
             # STEP 0: Reading database (nslcmops, nsrs, nsds, vnfrs, vnfds)
             stage[1] = "Reading from database."
             # nsState="BUILDING", currentOperation="INSTANTIATING", currentOperationID=nslcmop_id
@@ -1731,6 +1728,7 @@ class NsLcm(LcmBase):
             db_nsr = self.db.get_one("nsrs", {"_id": nsr_id})
             stage[1] = "Getting nsd={} from db.".format(db_nsr["nsd-id"])
             nsd = self.db.get_one("nsds", {"_id": db_nsr["nsd-id"]})
+            self.fs.sync(db_nsr["nsd-id"])
             db_nsr["nsd"] = nsd
             # nsr_name = db_nsr["name"]   # TODO short-name??
 
@@ -1747,6 +1745,7 @@ class NsLcm(LcmBase):
                 db_vnfrs[vnfr["member-vnf-index-ref"]] = vnfr
                 vnfd_id = vnfr["vnfd-id"]
                 vnfd_ref = vnfr["vnfd-ref"]
+                self.fs.sync(vnfd_id)
 
                 # if we haven't this vnfd, read it from db
                 if vnfd_id not in db_vnfds:
@@ -2110,8 +2109,11 @@ class NsLcm(LcmBase):
             db_vnfd_list = db_nsr.get('vnfd-id')
             if db_vnfd_list:
                 for vnfd in db_vnfd_list:
+                    db_vnf_relations = None
                     db_vnfd = self.db.get_one("vnfds", {"_id": vnfd})
-                    db_vnf_relations = get_configuration(db_vnfd, db_vnfd["id"]).get("relation", [])
+                    db_vnf_configuration = get_configuration(db_vnfd, db_vnfd["id"])
+                    if db_vnf_configuration:
+                        db_vnf_relations = db_vnf_configuration.get("relation", [])
                     if db_vnf_relations:
                         for r in db_vnf_relations:
                             # check if this VCA is in the relation
@@ -2284,6 +2286,12 @@ class NsLcm(LcmBase):
 
             # Obtain management service info (if exists)
             vnfr_update_dict = {}
+            kdu_config = get_configuration(vnfd, kdud["name"])
+            if kdu_config:
+                target_ee_list = kdu_config.get("execution-environment-list", [])
+            else:
+                target_ee_list = []
+
             if services:
                 vnfr_update_dict["kdur.{}.services".format(kdu_index)] = services
                 mgmt_services = [service for service in kdud.get("service", []) if service.get("mgmt-service")]
@@ -2303,6 +2311,11 @@ class NsLcm(LcmBase):
                                 if deep_get(vnfd, ("mgmt-interface", "cp")) == service_external_cp:
                                     vnfr_update_dict["ip-address"] = ip
 
+                                if find_in_list(
+                                    target_ee_list,
+                                    lambda ee: ee.get("external-connection-point-ref", "") == service_external_cp
+                                ):
+                                    vnfr_update_dict["kdur.{}.ip-address".format(kdu_index)] = ip
                             break
                     else:
                         self.logger.warn("Mgmt service name: {} not found".format(mgmt_service["name"]))