fix(configuration): juju related changes to honor descriptor changes introduced in...
[osm/LCM.git] / osm_lcm / ns.py
index e08e2d6..1e40fee 100644 (file)
@@ -28,10 +28,10 @@ from osm_lcm import ROclient
 from osm_lcm.ng_ro import NgRoClient, NgRoException
 from osm_lcm.lcm_utils import LcmException, LcmExceptionNoMgmtIP, LcmBase, deep_get, get_iterable, populate_dict
 from osm_lcm.data_utils.nsd import get_vnf_profiles
-from osm_lcm.data_utils.vnfd import get_vnf_configuration, get_vdu_list, get_vdu_profile, \
+from osm_lcm.data_utils.vnfd import get_vdu_list, get_vdu_profile, \
     get_ee_sorted_initial_config_primitive_list, get_ee_sorted_terminate_config_primitive_list, \
-    get_kdu_list, get_virtual_link_profiles, get_vdu, get_vdu_configuration, get_kdu_configuration, \
-    get_vdu_index, get_scaling_aspect, get_number_of_instances
+    get_kdu_list, get_virtual_link_profiles, get_vdu, get_configuration, \
+    get_vdu_index, get_scaling_aspect, get_number_of_instances, get_juju_ee_ref
 from osm_lcm.data_utils.list_utils import find_in_list
 from osm_lcm.data_utils.vnfr import get_osm_params
 from osm_lcm.data_utils.dict_utils import parse_yaml_strings
@@ -338,7 +338,6 @@ class NsLcm(LcmBase):
         # remove unused by RO configuration, monitoring, scaling and internal keys
         vnfd_RO.pop("_id", None)
         vnfd_RO.pop("_admin", None)
-        vnfd_RO.pop("vnf-configuration", None)
         vnfd_RO.pop("monitoring-param", None)
         vnfd_RO.pop("scaling-group-descriptor", None)
         vnfd_RO.pop("kdu", None)
@@ -646,10 +645,13 @@ class NsLcm(LcmBase):
             }
             # check if this network needs SDN assist
             if vld.get("pci-interfaces"):
-                db_vim = VimAccountDB.get_vim_account_with_id(target_vld["vim_info"][0]["vim_account_id"])
+                db_vim = get_vim_account(ns_params["vimAccountId"])
                 sdnc_id = db_vim["config"].get("sdn-controller")
                 if sdnc_id:
-                    target_vld["vim_info"].append({"sdnc_id": sdnc_id})
+                    sdn_vld = "nsrs:{}:vld.{}".format(nsr_id, vld["id"])
+                    target_sdn = "sdn:{}".format(sdnc_id)
+                    target_vld["vim_info"][target_sdn] = {
+                        "sdn": True, "target_vim": target_vim, "vlds": [sdn_vld], "type": vld.get("type")}
 
             nsd_vnf_profiles = get_vnf_profiles(nsd)
             for nsd_vnf_profile in nsd_vnf_profiles:
@@ -742,8 +744,8 @@ class NsLcm(LcmBase):
                 self.logger.debug("NS > ssh_keys > {}".format(ssh_keys_all))
 
                 if ssh_keys_all:
-                    vdu_configuration = get_vdu_configuration(vnfd, vdur["vdu-id-ref"])
-                    vnf_configuration = get_vnf_configuration(vnfd)
+                    vdu_configuration = get_configuration(vnfd, vdur["vdu-id-ref"])
+                    vnf_configuration = get_configuration(vnfd, vnfd["id"])
                     if vdu_configuration and vdu_configuration.get("config-access") and \
                        vdu_configuration.get("config-access").get("ssh-access"):
                         vdur["ssh-keys"] = ssh_keys_all
@@ -1230,7 +1232,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,
@@ -1795,7 +1797,7 @@ class NsLcm(LcmBase):
                 if db_vnfr.get("additionalParamsForVnf"):
                     deploy_params.update(parse_yaml_strings(db_vnfr["additionalParamsForVnf"].copy()))
 
-                descriptor_config = get_vnf_configuration(vnfd)
+                descriptor_config = get_configuration(vnfd, vnfd["id"])
                 if descriptor_config:
                     self._deploy_n2vc(
                         logging_text=logging_text + "member_vnf_index={} ".format(member_vnf_index),
@@ -1820,7 +1822,7 @@ class NsLcm(LcmBase):
                 # Deploy charms for each VDU that supports one.
                 for vdud in get_vdu_list(vnfd):
                     vdu_id = vdud["id"]
-                    descriptor_config = get_vdu_configuration(vnfd, vdu_id)
+                    descriptor_config = get_configuration(vnfd, vdu_id)
                     vdur = find_in_list(db_vnfr["vdur"], lambda vdu: vdu["vdu-id-ref"] == vdu_id)
 
                     if vdur.get("additionalParams"):
@@ -1859,7 +1861,7 @@ class NsLcm(LcmBase):
                             )
                 for kdud in get_kdu_list(vnfd):
                     kdu_name = kdud["name"]
-                    descriptor_config = kdud.get('kdu-configuration')
+                    descriptor_config = get_configuration(vnfd, kdu_name)
                     if descriptor_config:
                         vdu_id = None
                         vdu_index = 0
@@ -2050,7 +2052,7 @@ class NsLcm(LcmBase):
             if db_vnfd_list:
                 for vnfd in db_vnfd_list:
                     db_vnfd = self.db.get_one("vnfds", {"_id": vnfd})
-                    db_vnf_relations = deep_get(db_vnfd, ('vnf-configuration', 'relation'))
+                    db_vnf_relations = get_configuration(db_vnfd, db_vnfd["id"]).get("relation", [])
                     if db_vnf_relations:
                         for r in db_vnf_relations:
                             # check if this VCA is in the relation
@@ -2190,7 +2192,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,
@@ -2198,7 +2205,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
@@ -2235,8 +2244,9 @@ class NsLcm(LcmBase):
             vnfr_update_dict["kdur.{}.status".format(kdu_index)] = "READY"
             self.update_db_2("vnfrs", vnfr_data.get("_id"), vnfr_update_dict)
 
-            kdu_config = kdud.get("kdu-configuration")
-            if kdu_config and kdu_config.get("initial-config-primitive") and kdu_config.get("juju") is None:
+            kdu_config = get_configuration(vnfd, k8s_instance_info["kdu-name"])
+            if kdu_config and kdu_config.get("initial-config-primitive") and \
+               get_juju_ee_ref(vnfd, k8s_instance_info["kdu-name"]) is None:
                 initial_config_primitive_list = kdu_config.get("initial-config-primitive")
                 initial_config_primitive_list.sort(key=lambda val: int(val["seq"]))
 
@@ -2425,10 +2435,8 @@ class NsLcm(LcmBase):
         # fill db_nsr._admin.deployed.VCA.<index>
 
         self.logger.debug(logging_text + "_deploy_n2vc vnfd_id={}, vdu_id={}".format(vnfd_id, vdu_id))
-        if descriptor_config.get("juju"):   # There is one execution envioronment of type juju
-            ee_list = [descriptor_config]
-        elif descriptor_config.get("execution-environment-list"):
-            ee_list = descriptor_config.get("execution-environment-list")
+        if "execution-environment-list" in descriptor_config:
+            ee_list = descriptor_config.get("execution-environment-list", [])
         else:  # other types as script are not supported
             ee_list = []
 
@@ -3036,16 +3044,13 @@ class NsLcm(LcmBase):
                     config_descriptor = db_nsr.get("ns-configuration")
                 elif vca.get("vdu_id"):
                     db_vnfd = db_vnfds_from_member_index[vca["member-vnf-index"]]
-                    vdud = next((vdu for vdu in db_vnfd.get("vdu", ()) if vdu["id"] == vca.get("vdu_id")), None)
-                    if vdud:
-                        config_descriptor = vdud.get("vdu-configuration")
+                    config_descriptor = get_configuration(db_vnfd, vca.get("vdu_id"))
                 elif vca.get("kdu_name"):
                     db_vnfd = db_vnfds_from_member_index[vca["member-vnf-index"]]
-                    kdud = next((kdu for kdu in db_vnfd.get("kdu", ()) if kdu["name"] == vca.get("kdu_name")), None)
-                    if kdud:
-                        config_descriptor = kdud.get("kdu-configuration")
+                    config_descriptor = get_configuration(db_vnfd, vca.get("kdu_name"))
                 else:
-                    config_descriptor = db_vnfds_from_member_index[vca["member-vnf-index"]].get("vnf-configuration")
+                    db_vnfd = db_vnfds_from_member_index[vca["member-vnf-index"]]
+                    config_descriptor = get_configuration(db_vnfd, db_vnfd["id"]) 
                 vca_type = vca.get("type")
                 exec_terminate_primitives = (not operation_params.get("skip_terminate_primitives") and
                                              vca.get("needed_terminate"))
@@ -3424,11 +3429,11 @@ class NsLcm(LcmBase):
             # look for primitive
             config_primitive_desc = descriptor_configuration = None
             if vdu_id:
-                descriptor_configuration = get_vdu_configuration(db_vnfd, vdu_id)
+                descriptor_configuration = get_configuration(db_vnfd, vdu_id)
             elif kdu_name:
-                descriptor_configuration = get_kdu_configuration(db_vnfd, kdu_name)
+                descriptor_configuration = get_configuration(db_vnfd, kdu_name)
             elif vnf_index:
-                descriptor_configuration = get_vnf_configuration(db_vnfd)
+                descriptor_configuration = get_configuration(db_vnfd, db_vnfd["id"])
             else:
                 descriptor_configuration = db_nsd.get("ns-configuration")
 
@@ -3459,8 +3464,8 @@ class NsLcm(LcmBase):
                     desc_params = parse_yaml_strings(db_vnfr.get("additionalParamsForVnf"))
             else:
                 desc_params = parse_yaml_strings(db_nsr.get("additionalParamsForNs"))
-            if kdu_name and get_kdu_configuration(db_vnfd, kdu_name):
-                kdu_configuration = get_kdu_configuration(db_vnfd, kdu_name)
+            if kdu_name and get_configuration(db_vnfd, kdu_name):
+                kdu_configuration = get_configuration(db_vnfd, kdu_name)
                 actions = set()
                 for primitive in kdu_configuration.get("initial-config-primitive", []):
                     actions.add(primitive["name"])
@@ -3812,7 +3817,9 @@ class NsLcm(LcmBase):
                             "executing pre-scale scaling-config-action '{}'".format(vnf_config_primitive)
 
                         # look for primitive
-                        for config_primitive in db_vnfd.get("vnf-configuration", {}).get("config-primitive", ()):
+                        for config_primitive in (get_configuration(
+                            db_vnfd, db_vnfd["id"]
+                        ) or {}).get("config-primitive", ()):
                             if config_primitive["name"] == vnf_config_primitive:
                                 break
                         else:
@@ -3907,7 +3914,9 @@ class NsLcm(LcmBase):
                             vnfr_params.update(db_vnfr["additionalParamsForVnf"])
 
                         # look for primitive
-                        for config_primitive in db_vnfd.get("vnf-configuration", {}).get("config-primitive", ()):
+                        for config_primitive in (
+                            get_configuration(db_vnfd, db_vnfd["id"]) or {}
+                        ).get("config-primitive", ()):
                             if config_primitive["name"] == vnf_config_primitive:
                                 break
                         else: