X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FNBI.git;a=blobdiff_plain;f=osm_nbi%2Fdescriptor_topics.py;h=7ea06c5c67dc55e0105315dcac93955a5e7d0c43;hp=ff5da89d8de1bfed124efbf7155d8fc2a7097184;hb=41a52059cbcadb9bb7baebb38ff9503a362ea8e8;hpb=b995ea260a3a2f88a4e041c7e2dd745daee91825;ds=sidebyside diff --git a/osm_nbi/descriptor_topics.py b/osm_nbi/descriptor_topics.py index ff5da89..7ea06c5 100644 --- a/osm_nbi/descriptor_topics.py +++ b/osm_nbi/descriptor_topics.py @@ -33,7 +33,7 @@ etsi_nfv_nsd = importlib.import_module("osm_im.etsi-nfv-nsd") from osm_im.nst import nst as nst_im from pyangbind.lib.serialise import pybindJSONDecoder import pyangbind.lib.pybindJSON as pybindJSON -from osm_nbi.utils import deep_update_dict +from osm_nbi import utils __author__ = "Alfonso Tierno " @@ -473,7 +473,7 @@ class VnfdTopic(DescriptorTopic): out = pybindJSON.dumps(myvnfd, mode="ietf") desc_out = self._remove_envelop(yaml.safe_load(out)) desc_out = self._remove_yang_prefixes_from_descriptor(desc_out) - return deep_update_dict(data, desc_out) + return utils.deep_update_dict(data, desc_out) except Exception as e: raise EngineException("Error in pyangbind validation: {}".format(str(e)), http_code=HTTPStatus.UNPROCESSABLE_ENTITY) @@ -561,8 +561,8 @@ class VnfdTopic(DescriptorTopic): for vdu in get_iterable(indata.get("vdu")): self.validate_vdu_internal_connection_points(vdu) - self._validate_vdu_charms_in_package(storage_params, vdu, indata) self._validate_vdu_cloud_init_in_package(storage_params, vdu, indata) + self._validate_vdu_charms_in_package(storage_params, indata) self._validate_vnf_charms_in_package(storage_params, indata) @@ -621,14 +621,15 @@ class VnfdTopic(DescriptorTopic): http_code=HTTPStatus.UNPROCESSABLE_ENTITY) # TODO: Validate k8s-cluster-net points to a valid k8s-cluster:nets ? - def _validate_vdu_charms_in_package(self, storage_params, vdu, indata): - if not vdu.get("vdu-configuration"): - return - for vdu_configuration in get_iterable(indata.get("vdu-configuration")): - if vdu_configuration.get("juju"): - if not self._validate_package_folders(storage_params, 'charms'): - raise EngineException("Charm defined in vnf[id={}] but not present in " - "package".format(indata["id"])) + def _validate_vdu_charms_in_package(self, storage_params, indata): + for df in indata["df"]: + if "lcm-operations-configuration" in df and "operate-vnf-op-config" in df["lcm-operations-configuration"]: + configs = df["lcm-operations-configuration"]["operate-vnf-op-config"].get("day1-2", []) + for config in configs: + if config.get("juju"): + if not self._validate_package_folders(storage_params, 'charms'): + raise EngineException("Charm defined in vnf[id={}] but not present in " + "package".format(indata["id"])) def _validate_vdu_cloud_init_in_package(self, storage_params, vdu, indata): if not vdu.get("cloud-init-file"): @@ -638,13 +639,19 @@ class VnfdTopic(DescriptorTopic): "package".format(indata["id"], vdu["id"])) def _validate_vnf_charms_in_package(self, storage_params, indata): - if not indata.get("vnf-configuration"): - return - for vnf_configuration in get_iterable(indata.get("vnf-configuration")): - if vnf_configuration.get("juju"): - if not self._validate_package_folders(storage_params, 'charms'): - raise EngineException("Charm defined in vnf[id={}] but not present in " - "package".format(indata["id"])) + # Get VNF configuration through new container + for deployment_flavor in indata.get('df', []): + if "lcm-operations-configuration" not in deployment_flavor: + return + if "operate-vnf-op-config" not in deployment_flavor["lcm-operations-configuration"]: + return + for day_1_2_config in deployment_flavor["lcm-operations-configuration"]["operate-vnf-op-config"]["day1-2"]: + if day_1_2_config["id"] == indata["id"]: + vnf_configuration = day_1_2_config + if vnf_configuration.get("juju"): + if not self._validate_package_folders(storage_params, 'charms'): + raise EngineException("Charm defined in vnf[id={}] but not present in " + "package".format(indata["id"])) def _validate_package_folders(self, storage_params, folder, file=None): if not storage_params or not storage_params.get("pkg-dir"): @@ -755,19 +762,25 @@ class VnfdTopic(DescriptorTopic): http_code=HTTPStatus.UNPROCESSABLE_ENTITY) for sca in get_iterable(sa.get("scaling-config-action")): - if not indata.get("vnf-configuration"): - raise EngineException("'vnf-configuration' not defined in the descriptor but it is referenced " - "by df[id='{}']:scaling-aspect[id='{}']:scaling-config-action" + if "lcm-operations-configuration" not in df \ + or "operate-vnf-op-config" not in df["lcm-operations-configuration"] \ + or not utils.find_in_list( + df["lcm-operations-configuration"]["operate-vnf-op-config"].get("day1-2", []), + lambda config: config["id"] == indata["id"]): + raise EngineException("'day1-2 configuration' not defined in the descriptor but it is " + "referenced by df[id='{}']:scaling-aspect[id='{}']:scaling-config-action" .format(df["id"], sa["id"]), http_code=HTTPStatus.UNPROCESSABLE_ENTITY) - for configuration in get_iterable(indata["vnf-configuration"]): + for configuration in get_iterable( + df["lcm-operations-configuration"]["operate-vnf-op-config"].get("day1-2", []) + ): for primitive in get_iterable(configuration.get("config-primitive")): if primitive["name"] == sca["vnf-config-primitive-name-ref"]: break else: raise EngineException("df[id='{}']:scaling-aspect[id='{}']:scaling-config-action:vnf-" "config-primitive-name-ref='{}' does not match any " - "vnf-configuration:config-primitive:name" + "day1-2 configuration:config-primitive:name" .format(df["id"], sa["id"], sca["vnf-config-primitive-name-ref"]), http_code=HTTPStatus.UNPROCESSABLE_ENTITY)