X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FNBI.git;a=blobdiff_plain;f=osm_nbi%2Fdescriptor_topics.py;h=ed958b1f6578c39ec0179e5061da0c42129a8ece;hp=4e056f53035938c9fadffbbfca8f6447e8e7aa03;hb=61e0c52d4715b5726a369959d69a1305d6790ae2;hpb=7cbd03c5c21202fff473ae943e75dd49a18f2516 diff --git a/osm_nbi/descriptor_topics.py b/osm_nbi/descriptor_topics.py index 4e056f5..ed958b1 100644 --- a/osm_nbi/descriptor_topics.py +++ b/osm_nbi/descriptor_topics.py @@ -456,6 +456,9 @@ class VnfdTopic(DescriptorTopic): DescriptorTopic.__init__(self, db, fs, msg, auth) def pyangbind_validation(self, item, data, force=False): + if self._descriptor_data_is_in_old_format(data): + raise EngineException("ERROR: Unsupported descriptor format. Please, use an ETSI SOL006 descriptor.", + http_code=HTTPStatus.UNPROCESSABLE_ENTITY) try: virtual_compute_descriptors = data.get('virtual-compute-desc') virtual_storage_descriptors = data.get('virtual-storage-desc') @@ -474,6 +477,10 @@ class VnfdTopic(DescriptorTopic): raise EngineException("Error in pyangbind validation: {}".format(str(e)), http_code=HTTPStatus.UNPROCESSABLE_ENTITY) + @staticmethod + def _descriptor_data_is_in_old_format(data): + return ('vnfd-catalog' in data) or ('vnfd:vnfd-catalog' in data) + @staticmethod def _remove_envelop(indata=None): if not indata: @@ -797,18 +804,28 @@ class NsdTopic(DescriptorTopic): DescriptorTopic.__init__(self, db, fs, msg, auth) def pyangbind_validation(self, item, data, force=False): + if self._descriptor_data_is_in_old_format(data): + raise EngineException("ERROR: Unsupported descriptor format. Please, use an ETSI SOL006 descriptor.", + http_code=HTTPStatus.UNPROCESSABLE_ENTITY) try: + nsd_vnf_profiles = data.get('df', [{}])[0].get('vnf-profile', []) mynsd = etsi_nfv_nsd.etsi_nfv_nsd() pybindJSONDecoder.load_ietf_json({'nsd': {'nsd': [data]}}, None, None, obj=mynsd, path_helper=True, skip_unknown=force) out = pybindJSON.dumps(mynsd, mode="ietf") desc_out = self._remove_envelop(yaml.safe_load(out)) desc_out = self._remove_yang_prefixes_from_descriptor(desc_out) + if nsd_vnf_profiles: + desc_out['df'][0]['vnf-profile'] = nsd_vnf_profiles return desc_out except Exception as e: raise EngineException("Error in pyangbind validation: {}".format(str(e)), http_code=HTTPStatus.UNPROCESSABLE_ENTITY) + @staticmethod + def _descriptor_data_is_in_old_format(data): + return ('nsd-catalog' in data) or ('nsd:nsd-catalog' in data) + @staticmethod def _remove_envelop(indata=None): if not indata: