Exemple #1
0
    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)
Exemple #4
0
 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)
Exemple #5
0
 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
     ]
Exemple #6
0
    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)
Exemple #7
0
    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)
Exemple #8
0
    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()
Exemple #9
0
 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)