X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fplugins%2Frwlaunchpadtasklet%2Frift%2Ftasklets%2Frwlaunchpad%2Fuploader.py;h=e89c50a63639012af17acb9ba78da15c7a65fc7c;hb=98226052917c2039d58717c0f09124941bb54546;hp=c8fc3fc5fadeded0ef376f46de57bef7fde4a462;hpb=07b439824b5eac4dc760ce56b52fbdcf5539db4c;p=osm%2FSO.git diff --git a/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/tasklets/rwlaunchpad/uploader.py b/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/tasklets/rwlaunchpad/uploader.py index c8fc3fc5..e89c50a6 100644 --- a/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/tasklets/rwlaunchpad/uploader.py +++ b/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/tasklets/rwlaunchpad/uploader.py @@ -251,6 +251,7 @@ class UpdatePackage(downloader.DownloaderProtocol): with pkg as temp_package: package_checksums = self.validate_package(temp_package) stored_package = self.update_package(temp_package) + self.validate_vnfd_fields(temp_package) try: self.extract_charms(temp_package) @@ -391,17 +392,34 @@ class UpdatePackage(downloader.DownloaderProtocol): except rift.package.icon.IconExtractionError as e: raise MessageException(UpdateExtractionError()) from e + def validate_vnfd_fields(self, package): + # We can add more VNFD validations here. Currently we are validating only cloud-init + if package.descriptor_msg is not None: + self.validate_cloud_init_file(package) + + def validate_cloud_init_file(self, package): + """ This validation is for VNFDs with associated VDUs. """ + if 'vdu' in package.descriptor_msg.as_dict(): + for vdu in package.descriptor_msg.as_dict()['vdu']: + if 'cloud_init_file' in vdu: + cloud_init_file = vdu['cloud_init_file'] + for file in package.files: + if file.endswith('/' + cloud_init_file) is True: + return + raise MessageException( + OnboardError("Cloud-Init file reference in VNFD does not match with cloud-init file")) + def validate_package(self, package): checksum_validator = rift.package.package.PackageChecksumValidator(self.log) try: - file_checksums = checksum_validator.validate(package) + checksum_validator.validate(package) except rift.package.package.PackageFileChecksumError as e: raise MessageException(UpdateChecksumMismatch(e.filename)) from e except rift.package.package.PackageValidationError as e: raise MessageException(UpdateUnreadablePackage()) from e - return file_checksums + return checksum_validator.checksums def update_descriptors(self, package): descriptor_msg = package.descriptor_msg @@ -433,6 +451,7 @@ class OnboardPackage(downloader.DownloaderProtocol): with pkg as temp_package: package_checksums = self.validate_package(temp_package) stored_package = self.store_package(temp_package) + self.validate_vnfd_fields(temp_package) try: self.extract_charms(temp_package) @@ -569,17 +588,40 @@ class OnboardPackage(downloader.DownloaderProtocol): except rift.package.icon.IconExtractionError as e: raise MessageException(OnboardExtractionError()) from e + def validate_vnfd_fields(self, package): + # We can add more VNFD validations here. Currently we are validating only cloud-init + if package.descriptor_msg is not None: + self.validate_cloud_init_file(package) + + def validate_cloud_init_file(self, package): + """ This validation is for VNFDs with associated VDUs. """ + if 'vdu' in package.descriptor_msg.as_dict(): + for vdu in package.descriptor_msg.as_dict()['vdu']: + if 'cloud_init_file' in vdu: + cloud_init_file = vdu['cloud_init_file'] + for file in package.files: + if file.endswith('/' + cloud_init_file) is True: + return + raise MessageException( + OnboardError("Cloud-Init file reference in VNFD does not match with cloud-init file")) + def validate_package(self, package): - checksum_validator = rift.package.package.PackageChecksumValidator(self.log) + validators = ( + rift.package.package.PackageChecksumValidator(self.log), + rift.package.package.PackageConstructValidator(self.log), + ) - try: - file_checksums = checksum_validator.validate(package) - except rift.package.package.PackageFileChecksumError as e: - raise MessageException(OnboardChecksumMismatch(e.filename)) from e - except rift.package.package.PackageValidationError as e: - raise MessageException(OnboardUnreadablePackage()) from e + # Run the validators for checksum and package construction for imported pkgs + for validator in validators: + try: + validator.validate(package) + + except rift.package.package.PackageFileChecksumError as e: + raise MessageException(OnboardChecksumMismatch(e.filename)) from e + except rift.package.package.PackageValidationError as e: + raise MessageException(OnboardUnreadablePackage()) from e - return file_checksums + return validators[0].checksums def onboard_descriptors(self, package): descriptor_msg = package.descriptor_msg @@ -669,6 +711,7 @@ class UploaderApplication(tornado.web.Application): self, store_map=self.package_store_map, exporter=self.exporter, + onboarder=self.onboarder, catalog_map=catalog_map )