def _delete_app_artifacts_from_swift(self, ctxt, t_logger, logs_resource_id, assem): # Delete image file from swift if assem.image_id: img = objects.registry.Image.get_by_id(ctxt, assem.image_id) if img.docker_image_name: img_filename = img.docker_image_name.split('-', 1)[1] try: swift = solum_swiftclient.SwiftClient(ctxt) swift.delete_object('solum_du', img_filename) except swiftexp.ClientException: msg = "Unable to delete DU image from swift." t_logger.log(logging.ERROR, msg) LOG.debug(msg) t_logger.upload() return img.destroy(ctxt) # Delete logs try: log_handler = userlog_handler.UserlogHandler(ctxt) log_handler.delete(logs_resource_id) except exception.AuthorizationFailure as authexcp: t_logger.log(logging.ERROR, six.text_type(authexcp)) LOG.debug(six.text_type(authexcp)) t_logger.upload()
def delete(self, uuid): """Delete a languagepack.""" db_obj = objects.registry.Image.get_lp_by_name_or_uuid( self.context, uuid) # Check if the languagepack is being used. if (self._check_lp_referenced_in_any_plan(self.context, db_obj) or self._check_lp_referenced_in_any_app(self.context, db_obj)): raise exc.LPStillReferenced(name=uuid) if db_obj.docker_image_name: img_filename = db_obj.docker_image_name.split('-', 1)[1] if cfg.CONF.worker.image_storage == 'swift': # Delete image file from swift try: swift = solum_swiftclient.SwiftClient(self.context) swift.delete_object('solum_lp', img_filename) except swiftexp.ClientException: raise exc.AuthorizationFailure( client='swift', message="Unable to delete languagepack image " "from swift.") elif cfg.CONF.worker.image_storage == 'glance': glance = solum_glanceclient.GlanceClient(self.context) glance.delete_image_by_name(img_filename) else: LOG.error("Unrecognized image_storage option specified.") return # Delete logs log_handler = userlog_handler.UserlogHandler(self.context) log_handler.delete(db_obj.uuid) return db_obj.destroy(self.context)
def delete(self, uuid): """Delete a languagepack.""" db_obj = objects.registry.Image.get_lp_by_name_or_uuid(self.context, uuid) # Check if the languagepack is being used. if (self._check_lp_referenced_in_any_plan(self.context, db_obj) or self._check_lp_referenced_in_any_app(self.context, db_obj)): raise exc.LPStillReferenced(name=uuid) # Delete image file from swift if db_obj.docker_image_name: img_filename = db_obj.docker_image_name.split('-', 1)[1] try: swift = solum_swiftclient.SwiftClient(self.context) swift.delete_object('solum_lp', img_filename) except swiftexp.ClientException: raise exc.AuthorizationFailure( client='swift', message="Unable to delete languagepack image from swift.") # Delete logs log_handler = userlog_handler.UserlogHandler(self.context) log_handler.delete(db_obj.uuid) return db_obj.destroy(self.context)
def delete(self, resource_uuid): """Delete existing logs.""" ulogs = objects.registry.UserlogList.get_all_by_id( self.context, resource_uuid=resource_uuid) # Delete log files swift = solum_swiftclient.SwiftClient(self.context) for ulog in ulogs: location = ulog.location strategy = ulog.strategy strategy_info = json.loads(ulog.strategy_info) if strategy == 'swift': # Delete logs from swift try: swift.delete_object(strategy_info['container'], location) except swiftexp.ClientException: raise exc.AuthorizationFailure( client='swift', message="Unable to delete logs from swift.") elif strategy == 'local': # Delete logs from local filesystem # This setting is exclusively used for single node deployments. try: os.remove(location) except OSError: pass # Delete the log reference from db. ulog.destroy(self.context) return
def _download_lp(self, lp_obj_name, lp_img_tag, logger): # TODO(james_li): try cache before downloading from origin logger.log(logging.INFO, 'Downloading LP...') if self.image_storage == 'glance': return elif self.image_storage == 'docker_registry': return elif self.image_storage == 'swift': if self.work_dir is None: return path = '{}/lp/{}'.format(self.work_dir, lp_obj_name) swift = solum_swiftclient.SwiftClient(self.context) try: swift.download(path, 'solum_lp', lp_obj_name) except swiftexp.ClientException as e: LOG.error('Error in downloading LP %s, %s' % (lp_obj_name, str(e))) logger.log(logging.ERROR, 'Downloading LP failed.') return if self._docker_load(path) != 0: logger.log(logging.ERROR, 'Loading docker image failed.') return logger.log(logging.INFO, 'LP downloaded and loaded successfully.') return lp_img_tag
def test_swift_client_upload_exception(self, mock_file_size, mock_swift_client, mock_open): ctxt = utils.dummy_context() mock_file_size.return_value = 0 swift = swiftclient.SwiftClient(ctxt) self.assertRaises(exc.InvalidObjectSizeError, swift.upload, 'filepath', 'fake-container', 'fname')
def _delete_app_artifacts_from_swift(self, ctxt, t_logger, assem): if assem.image_id: img = objects.registry.Image.get_by_id(ctxt, assem.image_id) if img.docker_image_name: img_filename = img.docker_image_name.split('-', 1)[1] try: swift = solum_swiftclient.SwiftClient(ctxt) swift.delete_object('solum_du', img_filename) except swiftexp.ClientException: msg = "Unable to delete DU image from swift." t_logger.log(logging.ERROR, msg) LOG.debug(msg) t_logger.upload() return img.destroy(ctxt)
def _persist_to_backend(self, local_file, swift_container, swift_obj, logger): loc = None if (self.image_storage == 'glance' or self.image_storage == 'docker_registry'): return loc elif self.image_storage == 'swift': swift = solum_swiftclient.SwiftClient(self.context) try: swift.upload(local_file, swift_container, swift_obj) loc = swift_obj except exc.InvalidObjectSizeError: logger.log(logging.INFO, 'Image with size exceeding 5GB' ' is not supported') except swiftexp.ClientException as e: LOG.error('Error in persisting artifact to swift, %s' % str(e)) return loc
def test_swift_client_upload(self, mock_file_size, mock_swift_client, mock_open): ctxt = utils.dummy_context() container = 'fake-container' filename = 'fake-file' mock_client = mock_swift_client.return_value fsize = 5 mock_file_size.return_value = fsize swift = swiftclient.SwiftClient(ctxt) swift.upload('filepath', container, filename) mock_client.put_container.assert_called_once_with(container) mock_client.put_object.assert_called_once_with(container, filename, mock.ANY, content_length=fsize)
def _upload(self, container, filename, filepath): swift = swiftclient.SwiftClient(self.context) swift.upload(filepath, container, filename)