【openstack】Quantum消息处理流程简析
Quantum消息处理流程

调用kestone进行鉴权。
根据鉴权信息(user_id,tenant_id,roles等),更新请求中的环境上下文。
?则加载ext_db_models表示的数据库建模类
?类ExtensionManager初始化主要是加载扩展类目录中的扩展类,代码解析如下:
?5)???? 初始化ExtensionMiddleware
整个初始化过程主要使用从Ruby移植到Python的Routes开发包,用来定义URL和应用程序接口之间的映射,这里不是很懂,网上关于Routes的资料除了官方文档外几乎没有。
?
def __init__(self, application, ext_mgr=None): self.ext_mgr = (ext_mgr or ExtensionManager( get_extensions_path())) # 定义mapper mapper = routes.Mapper() # extended resources for resource in self.ext_mgr.get_resources(): LOG.debug(_('Extended resource: %s'), resource.collection) for action, method in resource.collection_actions.iteritems(): path_prefix = "" parent = resource.parent conditions = dict(method=[method]) path = "/%s/%s" % (resource.collection, action) if parent: path_prefix = "/%s/{%s_id}" % (parent["collection_name"], parent["member_name"]) with mapper.submapper(controller=resource.controller, action=action, path_prefix=path_prefix, conditions=conditions) as submap: submap.connect(path) submap.connect("%s.:(format)" % path) mapper.resource(resource.collection, resource.collection, controller=resource.controller, member=resource.member_actions, parent_resource=resource.parent) # extended actions action_controllers = self._action_ext_controllers(application, self.ext_mgr, mapper) for action in self.ext_mgr.get_actions(): LOG.debug(_('Extended action: %s'), action.action_name) controller = action_controllers[action.collection] controller.add_action(action.action_name, action.handler) # extended requests req_controllers = self._request_ext_controllers(application, self.ext_mgr, mapper) for request_ext in self.ext_mgr.get_request_extensions(): LOG.debug(_('Extended request: %s'), request_ext.key) controller = req_controllers[request_ext.key] controller.add_handler(request_ext.handler) # 个人理解,开始根据Mapper解析URL,_dispatch()方法根据解析的结果进行处理 self._router = routes.middleware.RoutesMiddleware(self._dispatch, mapper) super(ExtensionMiddleware, self).__init__(application)??
对于每一个资源的处理是在quantum/api/v2/base.py/Controller类中
处理类:quantum/api/v2/router.py::APIRouter类
初始化:
self._router = routes.middleware.RoutesMiddleware(self._dispatch, self.map)
?
?