Fix bug 1412: Generate kdu instance from LCM
[osm/LCM.git] / osm_lcm / ns.py
index c7e0184..26eed85 100644 (file)
@@ -783,8 +783,23 @@ class NsLcm(LcmBase):
                 ns_flavor = target["flavor"][int(vdur["ns-flavor-id"])]
                 if target_vim not in ns_flavor["vim_info"]:
                     ns_flavor["vim_info"][target_vim] = {}
-                # image
-                ns_image = target["image"][int(vdur["ns-image-id"])]
+
+                # deal with images
+                # in case alternative images are provided we must check if they should be applied
+                # for the vim_type, modify the vim_type taking into account
+                ns_image_id = int(vdur["ns-image-id"])
+                if vdur.get("alt-image-ids"):
+                    db_vim = get_vim_account(vnfr["vim-account-id"])
+                    vim_type = db_vim["vim_type"]
+                    for alt_image_id in vdur.get("alt-image-ids"):
+                        ns_alt_image = target["image"][int(alt_image_id)]
+                        if vim_type == ns_alt_image.get("vim-type"):
+                            # must use alternative image
+                            self.logger.debug("use alternative image id: {}".format(alt_image_id))
+                            ns_image_id = alt_image_id
+                            vdur["ns-image-id"] = ns_image_id
+                            break
+                ns_image = target["image"][int(ns_image_id)]
                 if target_vim not in ns_image["vim_info"]:
                     ns_image["vim_info"][target_vim] = {}
 
@@ -1215,7 +1230,7 @@ class NsLcm(LcmBase):
                         cloud_name=vca_k8s_cloud,
                         credential_name=vca_k8s_cloud_credential,
                     )
-                elif vca_type == "helm" or vca_type == "helm-v3":                    
+                elif vca_type == "helm" or vca_type == "helm-v3":     
                     ee_id, credentials = await self.vca_map[vca_type].create_execution_environment(
                         namespace=namespace,
                         reuse_ee_id=ee_id,
@@ -1844,7 +1859,7 @@ class NsLcm(LcmBase):
                             )
                 for kdud in get_kdu_list(vnfd):
                     kdu_name = kdud["name"]
-                    descriptor_config = get_kdu_configuration(vnfd, kdu_name)
+                    descriptor_config = kdud.get('kdu-configuration')
                     if descriptor_config:
                         vdu_id = None
                         vdu_index = 0
@@ -1886,7 +1901,7 @@ class NsLcm(LcmBase):
                 vdu_name = None
 
                 # Get additional parameters
-                deploy_params = {"OSM": get_osm_params(db_vnfr)}
+                deploy_params = {"OSM": {"vim_account_id": ns_params["vimAccountId"]}}
                 if db_nsr.get("additionalParamsForNs"):
                     deploy_params.update(parse_yaml_strings(db_nsr["additionalParamsForNs"].copy()))
                 base_folder = nsd["_admin"]["storage"]
@@ -2175,7 +2190,12 @@ class NsLcm(LcmBase):
                                "filter": {"_id": nsr_id},
                                "path": nsr_db_path}
 
-            kdu_instance = await self.k8scluster_map[k8sclustertype].install(
+            kdu_instance = self.k8scluster_map[k8sclustertype].generate_kdu_instance_name(
+                db_dict=db_dict_install,
+                kdu_model=k8s_instance_info["kdu-model"],
+            )
+            self.update_db_2("nsrs", nsr_id, {nsr_db_path + ".kdu-instance": kdu_instance})
+            await self.k8scluster_map[k8sclustertype].install(
                 cluster_uuid=k8s_instance_info["k8scluster-uuid"],
                 kdu_model=k8s_instance_info["kdu-model"],
                 atomic=True,
@@ -2183,7 +2203,9 @@ class NsLcm(LcmBase):
                 db_dict=db_dict_install,
                 timeout=timeout,
                 kdu_name=k8s_instance_info["kdu-name"],
-                namespace=k8s_instance_info["namespace"])
+                namespace=k8s_instance_info["namespace"],
+                kdu_instance=kdu_instance,
+            )
             self.update_db_2("nsrs", nsr_id, {nsr_db_path + ".kdu-instance": kdu_instance})
 
             # Obtain services to obtain management service ip
@@ -2313,14 +2335,14 @@ class NsLcm(LcmBase):
                     kdud = next(kdud for kdud in vnfd_with_id["kdu"] if kdud["name"] == kdur["kdu-name"])
                     namespace = kdur.get("k8s-namespace")
                     if kdur.get("helm-chart"):
-                        kdumodel = kdur["helm-chart"]["kdu-model-locator"]
+                        kdumodel = kdur["helm-chart"]
                         # Default version: helm3, if helm-version is v2 assign v2
                         k8sclustertype = "helm-chart-v3"
                         self.logger.debug("kdur: {}".format(kdur))
                         if kdur.get("helm-version") and kdur.get("helm-version") == "v2":
                             k8sclustertype = "helm-chart"
                     elif kdur.get("juju-bundle"):
-                        kdumodel = kdur["juju-bundle"]["kdu-model-locator"]
+                        kdumodel = kdur["juju-bundle"]
                         k8sclustertype = "juju-bundle"
                     else:
                         raise LcmException("kdu type for kdu='{}.{}' is neither helm-chart nor "
@@ -3447,9 +3469,9 @@ class NsLcm(LcmBase):
             if kdu_name and get_kdu_configuration(db_vnfd, kdu_name):
                 kdu_configuration = get_kdu_configuration(db_vnfd, kdu_name)
                 actions = set()
-                for primitive in kdu_configuration["initial-config-primitive"]:
+                for primitive in kdu_configuration.get("initial-config-primitive", []):
                     actions.add(primitive["name"])
-                for primitive in kdu_configuration["config-primitive"]:
+                for primitive in kdu_configuration.get("config-primitive", []):
                     actions.add(primitive["name"])
                 kdu_action = True if primitive_name in actions else False