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

Quantum消息处理流程

本博客欢迎转发,但请保留原作者(孔令贤HW)信息!内容系本人学习、研究和总结,如有雷同,实属荣幸! 

1      Paste.deploy配置


2      authtoken

调用kestone进行鉴权。

3      keystonecontext

根据鉴权信息(user_id,tenant_id,roles等),更新请求中的环境上下文。

4      extensions

1)     获取quantum.conf中core_plugin配置的插件类

2)     如果在quantum/extensions/extensions.py中ENABLED_EXTS中有该插件的配置信息,默认如下图:

 则加载
ext_db_models表示的数据库建模类

3)     加载core_plugin插件类

4)     初始化PluginAwareExtensionManager类及其父类ExtensionManager,两个类的类图如下:

 类
ExtensionManager初始化主要是加载扩展类目录中的扩展类,代码解析如下:

 5)
     初始化ExtensionMiddleware

整个初始化过程主要使用从Ruby移植到Python的Routes开发包,用来定义URL和应用程序接口之间的映射,这里不是很懂,网上关于Routes的资料除了官方文档外几乎没有。

 

Python代码 复制代码  收藏代码
  1. def __init__(self, application,   
  2.                  ext_mgr=None):   
  3.   
  4.         self.ext_mgr = (ext_mgr   
  5.                         or ExtensionManager(   
  6.                         get_extensions_path()))   
  7.         # 定义mapper   
  8.         mapper = routes.Mapper()   
  9.   
  10.         # extended resources   
  11.         for resource in self.ext_mgr.get_resources():   
  12.             LOG.debug(_('Extended resource: %s'),   
  13.                       resource.collection)   
  14.             for action, method in resource.collection_actions.iteritems():   
  15.                 path_prefix = ""   
  16.                 parent = resource.parent   
  17.                 conditions = dict(method=[method])   
  18.                 path = "/%s/%s" % (resource.collection, action)   
  19.                 if parent:   
  20.                     path_prefix = "/%s/{%s_id}" % (parent["collection_name"],   
  21.                                                    parent["member_name"])   
  22.                 with mapper.submapper(controller=resource.controller,   
  23.                                       action=action,   
  24.                                       path_prefix=path_prefix,   
  25.                                       conditions=conditions) as submap:   
  26.                     submap.connect(path)   
  27.                     submap.connect("%s.:(format)" % path)   
  28.             mapper.resource(resource.collection, resource.collection,   
  29.                             controller=resource.controller,   
  30.                             member=resource.member_actions,   
  31.                             parent_resource=resource.parent)   
  32.   
  33.         # extended actions   
  34.         action_controllers = self._action_ext_controllers(application,   
  35.                                                           self.ext_mgr, mapper)   
  36.         for action in self.ext_mgr.get_actions():   
  37.             LOG.debug(_('Extended action: %s'), action.action_name)   
  38.             controller = action_controllers[action.collection]   
  39.             controller.add_action(action.action_name, action.handler)   
  40.   
  41.         # extended requests   
  42.         req_controllers = self._request_ext_controllers(application,   
  43.                                                         self.ext_mgr, mapper)   
  44.         for request_ext in self.ext_mgr.get_request_extensions():   
  45.             LOG.debug(_('Extended request: %s'), request_ext.key)   
  46.             controller = req_controllers[request_ext.key]   
  47.             controller.add_handler(request_ext.handler)   
  48.   
  49.         # 个人理解,开始根据Mapper解析URL,_dispatch()方法根据解析的结果进行处理   
  50.         self._router = routes.middleware.RoutesMiddleware(self._dispatch,   
  51.                                                           mapper)   
  52.         super(ExtensionMiddleware, self).__init__(application)  

  

对于每一个资源的处理是在quantum/api/v2/base.py/Controller类中

5      quantumapiapp_v2_0

处理类:quantum/api/v2/router.py::APIRouter类

初始化:

1)     根据扩展类的配置更新quantum/api/v2/attributes.py::RESOURCE_ATTRIBUTE_MAP定义的对象属性,因为有的扩展类扩展了标准对象(network, port, subnet)的属性。

2)     同样使用Routes,定义URL和应用接口的映射关系。

3)     在父类的初始化中,同样调用:

self._router = routes.middleware.RoutesMiddleware(self._dispatch, self.map)

本博客欢迎转发,但请保留原作者(孔令贤HW)信息!内容系本人学习、研究和总结,如有雷同,实属荣幸!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值