X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_lcm%2Fns.py;h=22bc22626cfe697d23fb801807af4bb0054c7e97;hb=refs%2Fchanges%2F58%2F11458%2F1;hp=ab25be3ea67ca913c6f5a972256789177ada7dcb;hpb=b4ebcd0dd81e08d7294156c2aca10d84ca9bb824;p=osm%2FLCM.git diff --git a/osm_lcm/ns.py b/osm_lcm/ns.py index ab25be3..22bc226 100644 --- a/osm_lcm/ns.py +++ b/osm_lcm/ns.py @@ -17,7 +17,7 @@ ## import asyncio -from typing import Any, Dict +from typing import Any, Dict, List import yaml import logging import logging.handlers @@ -415,11 +415,17 @@ class NsLcm(LcmBase): try: if vdu.get("cloud-init-file"): base_folder = vnfd["_admin"]["storage"] - cloud_init_file = "{}/{}/cloud_init/{}".format( - base_folder["folder"], - base_folder["pkg-dir"], - vdu["cloud-init-file"], - ) + if base_folder["pkg-dir"]: + cloud_init_file = "{}/{}/cloud_init/{}".format( + base_folder["folder"], + base_folder["pkg-dir"], + vdu["cloud-init-file"], + ) + else: + cloud_init_file = "{}/Scripts/cloud_init/{}".format( + base_folder["folder"], + vdu["cloud-init-file"], + ) with self.fs.file_open(cloud_init_file, "r") as ci_file: cloud_init_content = ci_file.read() elif vdu.get("cloud-init"): @@ -1063,11 +1069,17 @@ class NsLcm(LcmBase): # read file and put content at target.cloul_init_content. Avoid ng_ro to use shared package system if vdur["cloud-init"] not in target["cloud_init_content"]: base_folder = vnfd["_admin"]["storage"] - cloud_init_file = "{}/{}/cloud_init/{}".format( - base_folder["folder"], - base_folder["pkg-dir"], - vdud.get("cloud-init-file"), - ) + if base_folder["pkg-dir"]: + cloud_init_file = "{}/{}/cloud_init/{}".format( + base_folder["folder"], + base_folder["pkg-dir"], + vdud.get("cloud-init-file"), + ) + else: + cloud_init_file = "{}/Scripts/cloud_init/{}".format( + base_folder["folder"], + vdud.get("cloud-init-file"), + ) with self.fs.file_open(cloud_init_file, "r") as ci_file: target["cloud_init_content"][ vdur["cloud-init"] @@ -1649,14 +1661,23 @@ class NsLcm(LcmBase): osm_config["osm"]["kdu_name"] = kdu_name # Get artifact path - artifact_path = "{}/{}/{}/{}".format( - base_folder["folder"], - base_folder["pkg-dir"], - "charms" - if vca_type in ("native_charm", "lxc_proxy_charm", "k8s_proxy_charm") - else "helm-charts", - vca_name, - ) + if base_folder["pkg-dir"]: + artifact_path = "{}/{}/{}/{}".format( + base_folder["folder"], + base_folder["pkg-dir"], + "charms" + if vca_type in ("native_charm", "lxc_proxy_charm", "k8s_proxy_charm") + else "helm-charts", + vca_name, + ) + else: + artifact_path = "{}/Scripts/{}/{}/".format( + base_folder["folder"], + "charms" + if vca_type in ("native_charm", "lxc_proxy_charm", "k8s_proxy_charm") + else "helm-charts", + vca_name, + ) self.logger.debug("Artifact path > {}".format(artifact_path)) @@ -2714,15 +2735,37 @@ class NsLcm(LcmBase): nsd: Dict[str, Any], vca: DeployedVCA, cached_vnfds: Dict[str, Any], - ): + ) -> List[Relation]: relations = [] db_ns_relations = get_ns_configuration_relation_list(nsd) for r in db_ns_relations: + provider_dict = None + requirer_dict = None + if all(key in r for key in ("provider", "requirer")): + provider_dict = r["provider"] + requirer_dict = r["requirer"] + elif "entities" in r: + provider_id = r["entities"][0]["id"] + provider_dict = { + "nsr-id": nsr_id, + "endpoint": r["entities"][0]["endpoint"], + } + if provider_id != nsd["id"]: + provider_dict["vnf-profile-id"] = provider_id + requirer_id = r["entities"][1]["id"] + requirer_dict = { + "nsr-id": nsr_id, + "endpoint": r["entities"][1]["endpoint"], + } + if requirer_id != nsd["id"]: + requirer_dict["vnf-profile-id"] = requirer_id + else: + raise Exception("provider/requirer or entities must be included in the relation.") relation_provider = self._update_ee_relation_data_with_implicit_data( - nsr_id, nsd, r["provider"], cached_vnfds + nsr_id, nsd, provider_dict, cached_vnfds ) relation_requirer = self._update_ee_relation_data_with_implicit_data( - nsr_id, nsd, r["requirer"], cached_vnfds + nsr_id, nsd, requirer_dict, cached_vnfds ) provider = EERelation(relation_provider) requirer = EERelation(relation_requirer) @@ -2738,7 +2781,7 @@ class NsLcm(LcmBase): nsd: Dict[str, Any], vca: DeployedVCA, cached_vnfds: Dict[str, Any], - ): + ) -> List[Relation]: relations = [] vnf_profile = get_vnf_profile(nsd, vca.vnf_profile_id) vnf_profile_id = vnf_profile["id"] @@ -2746,11 +2789,35 @@ class NsLcm(LcmBase): db_vnfd = self._get_vnfd(vnfd_id, cached_vnfds) db_vnf_relations = get_relation_list(db_vnfd, vnfd_id) for r in db_vnf_relations: + provider_dict = None + requirer_dict = None + if all(key in r for key in ("provider", "requirer")): + provider_dict = r["provider"] + requirer_dict = r["requirer"] + elif "entities" in r: + provider_id = r["entities"][0]["id"] + provider_dict = { + "nsr-id": nsr_id, + "vnf-profile-id": vnf_profile_id, + "endpoint": r["entities"][0]["endpoint"], + } + if provider_id != vnfd_id: + provider_dict["vdu-profile-id"] = provider_id + requirer_id = r["entities"][1]["id"] + requirer_dict = { + "nsr-id": nsr_id, + "vnf-profile-id": vnf_profile_id, + "endpoint": r["entities"][1]["endpoint"], + } + if requirer_id != vnfd_id: + requirer_dict["vdu-profile-id"] = requirer_id + else: + raise Exception("provider/requirer or entities must be included in the relation.") relation_provider = self._update_ee_relation_data_with_implicit_data( - nsr_id, nsd, r["provider"], cached_vnfds, vnf_profile_id=vnf_profile_id + nsr_id, nsd, provider_dict, cached_vnfds, vnf_profile_id=vnf_profile_id ) relation_requirer = self._update_ee_relation_data_with_implicit_data( - nsr_id, nsd, r["requirer"], cached_vnfds, vnf_profile_id=vnf_profile_id + nsr_id, nsd, requirer_dict, cached_vnfds, vnf_profile_id=vnf_profile_id ) provider = EERelation(relation_provider) requirer = EERelation(relation_requirer) @@ -3257,16 +3324,21 @@ class NsLcm(LcmBase): db_vnfds, lambda vnfd: vnfd["_id"] == vnfd_id ) storage = deep_get(vnfd_with_id, ("_admin", "storage")) - if storage and storage.get( - "pkg-dir" - ): # may be not present if vnfd has not artifacts + if storage: # may be not present if vnfd has not artifacts # path format: /vnfdid/pkkdir/helm-charts|juju-bundles/kdumodel - filename = "{}/{}/{}s/{}".format( - storage["folder"], - storage["pkg-dir"], - k8sclustertype, - kdumodel, - ) + if storage["pkg-dir"]: + filename = "{}/{}/{}s/{}".format( + storage["folder"], + storage["pkg-dir"], + k8sclustertype, + kdumodel, + ) + else: + filename = "{}/Scripts/{}s/{}".format( + storage["folder"], + k8sclustertype, + kdumodel, + ) if self.fs.file_exists( filename, mode="file" ) or self.fs.file_exists(filename, mode="dir"):