Bug 1526 Fix
[osm/LCM.git] / osm_lcm / ns.py
index 75db8e5..960fd31 100644 (file)
@@ -595,7 +595,7 @@ class NsLcm(LcmBase):
             for param in ("vim-network-name", "vim-network-id"):
                 if vld_params.get(param):
                     if isinstance(vld_params[param], dict):
-                        for vim, vim_net in vld_params[param]:
+                        for vim, vim_net in vld_params[param].items():
                             other_target_vim = "vim:" + vim
                             populate_dict(target_vld["vim_info"], (other_target_vim, param.replace("-", "_")), vim_net)
                     else:  # isinstance str
@@ -664,12 +664,25 @@ class NsLcm(LcmBase):
 
             # check at nsd descriptor, if there is an ip-profile
             vld_params = {}
-            virtual_link_profiles = get_virtual_link_profiles(nsd)
+            nsd_vlp = find_in_list(
+                get_virtual_link_profiles(nsd),
+                lambda a_link_profile: a_link_profile["virtual-link-desc-id"] == vld["id"])
+            if nsd_vlp and nsd_vlp.get("virtual-link-protocol-data") and \
+                    nsd_vlp["virtual-link-protocol-data"].get("l3-protocol-data"):
+                ip_profile_source_data = nsd_vlp["virtual-link-protocol-data"]["l3-protocol-data"]
+                ip_profile_dest_data = {}
+                if "ip-version" in ip_profile_source_data:
+                    ip_profile_dest_data["ip-version"] = ip_profile_source_data["ip-version"]
+                if "cidr" in ip_profile_source_data:
+                    ip_profile_dest_data["subnet-address"] = ip_profile_source_data["cidr"]
+                if "gateway-ip" in ip_profile_source_data:
+                    ip_profile_dest_data["gateway-address"] = ip_profile_source_data["gateway-ip"]
+                if "dhcp-enabled" in ip_profile_source_data:
+                    ip_profile_dest_data["dhcp-params"] = {
+                        "enabled": ip_profile_source_data["dhcp-enabled"]
+                    }
+                vld_params["ip-profile"] = ip_profile_dest_data
 
-            for vlp in virtual_link_profiles:
-                ip_profile = find_in_list(nsd["ip-profiles"],
-                                          lambda profile: profile["name"] == vlp["ip-profile-ref"])
-                vld_params["ip-profile"] = ip_profile["ip-profile-params"]
             # update vld_params with instantiation params
             vld_instantiation_params = find_in_list(get_iterable(ns_params, "vld"),
                                                     lambda a_vld: a_vld["name"] in (vld["name"], vld["id"]))
@@ -1644,9 +1657,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
@@ -1679,6 +1689,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??
 
@@ -1695,6 +1706,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:
@@ -2051,8 +2063,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
@@ -2195,6 +2210,7 @@ class NsLcm(LcmBase):
             kdu_instance = self.k8scluster_map[k8sclustertype].generate_kdu_instance_name(
                 db_dict=db_dict_install,
                 kdu_model=k8s_instance_info["kdu-model"],
+                kdu_name=k8s_instance_info["kdu-name"],
             )
             self.update_db_2("nsrs", nsr_id, {nsr_db_path + ".kdu-instance": kdu_instance})
             await self.k8scluster_map[k8sclustertype].install(
@@ -3895,7 +3911,7 @@ class NsLcm(LcmBase):
                                                                           vdu_count_index=None,
                                                                           ee_descriptor_id=ee_descriptor_id)
                             result, result_detail = await self._ns_execute_primitive(
-                                ee_id, primitive_name, primitive_params, vca_type)
+                                ee_id, primitive_name, primitive_params, vca_type=vca_type)
                             self.logger.debug(logging_text + "vnf_config_primitive={} Done with result {} {}".format(
                                 vnf_config_primitive, result, result_detail))
                             # Update operationState = COMPLETED | FAILED
@@ -4160,7 +4176,7 @@ class NsLcm(LcmBase):
                                                                           vdu_count_index=None,
                                                                           ee_descriptor_id=ee_descriptor_id)
                             result, result_detail = await self._ns_execute_primitive(
-                                ee_id, primitive_name, primitive_params, vca_type)
+                                ee_id, primitive_name, primitive_params, vca_type=vca_type)
                             self.logger.debug(logging_text + "vnf_config_primitive={} Done with result {} {}".format(
                                 vnf_config_primitive, result, result_detail))
                             # Update operationState = COMPLETED | FAILED