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 test_userlog_get_all_by_id(self, mock_registry): mock_registry.UserlogList.get_all_by_id.return_value = {} handler = userlog_handler.UserlogHandler(self.ctx) assembly = fakes.FakeAssembly() res = handler.get_all_by_id(assembly.id) self.assertIsNotNone(res) all_by_id = mock_registry.UserlogList.get_all_by_id all_by_id.assert_called_once_with(self.ctx, resource_uuid=assembly.id)
def get_all(self): """Return all Userlogs, based on the query provided.""" handler = userlog_handler.UserlogHandler( pecan.request.security_context) ulogs = handler.get_all_by_id(self._resource_id) host_url = pecan.request.application_url.rstrip('/') return [ userlog.Userlog.from_db_model(ulog, host_url) for ulog in ulogs ]
def test_userlog_delete_local_logs(self, mock_os_remove, mock_registry): fi = fakes.FakeImage() fakelog = fakes.FakeUserlog() flogs = [fakelog] mock_registry.UserlogList.get_all_by_id.return_value = flogs handler = userlog_handler.UserlogHandler(self.ctx) handler.delete(fi.uuid) mock_registry.UserlogList.get_all_by_id.assert_called_once_with( self.ctx, resource_uuid=fi.uuid) mock_os_remove.assert_called_once_with(flogs[0].location) fakelog.destroy.assert_called_once_with(self.ctx)
def test_userlog_delete_swift_logs(self, mock_swift_delete, mock_registry): fi = fakes.FakeImage() fakelog = fakes.FakeUserlog() fakelog.strategy = 'swift' fakelog.strategy_info = '{"container": "solum-logs"}' flogs = [fakelog] s_info = json.loads(flogs[0].strategy_info)['container'] location = flogs[0].location mock_registry.UserlogList.get_all_by_id.return_value = flogs handler = userlog_handler.UserlogHandler(self.ctx) handler.delete(fi.uuid) mock_registry.UserlogList.get_all_by_id.assert_called_once_with( self.ctx, resource_uuid=fi.uuid) mock_swift_delete.assert_called_once_with(s_info, location) fakelog.destroy.assert_called_once_with(self.ctx)
def _clean_up_artifacts(self, ctxt, t_logger, logs_resource_id, assem): try: if cfg.CONF.worker.image_storage == 'swift': self._delete_app_artifacts_from_swift(ctxt, t_logger, assem) elif cfg.CONF.worker.image_storage == 'glance': self._delete_app_artifacts_from_glance(ctxt, t_logger, assem) else: LOG.debug("image_storage option %s not recognized." % cfg.CONF.worker.image_storage) except Exception as e: LOG.exception(e) # 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 test_userlog_get_all(self, mock_registry): mock_registry.UserlogList.get_all.return_value = {} handler = userlog_handler.UserlogHandler(self.ctx) res = handler.get_all() self.assertIsNotNone(res) mock_registry.UserlogList.get_all.assert_called_once_with(self.ctx)