X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_lcm%2Fns.py;h=1e40fee5f23cae3740c7e44cb4d24845c1f483c5;hb=762b6e7182f5bbba4b4206b12204e77bd45c3d33;hp=5131f9f02e11bc5dedf2f294df8f2a760e2eb916;hpb=95cc9c5f864ef0d5b78eca278e41a023d7e79281;p=osm%2FLCM.git diff --git a/osm_lcm/ns.py b/osm_lcm/ns.py index 5131f9f..1e40fee 100644 --- a/osm_lcm/ns.py +++ b/osm_lcm/ns.py @@ -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 @@ -783,8 +785,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 +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, @@ -1780,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), @@ -1805,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"): @@ -1844,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 @@ -2035,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 @@ -2175,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, @@ -2183,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 @@ -2220,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"])) @@ -2410,10 +2435,8 @@ class NsLcm(LcmBase): # fill db_nsr._admin.deployed.VCA. 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 = [] @@ -3021,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")) @@ -3409,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") @@ -3444,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"]) @@ -3797,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: @@ -3892,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: