设为首页 收藏本站
查看: 1256|回复: 0

[经验分享] 【openstack】Quantum消息处理流程简析

[复制链接]

尚未签到

发表于 2015-4-12 14:30:12 | 显示全部楼层 |阅读模式
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的资料除了官方文档外几乎没有。
  


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类中
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)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-56337-1-1.html 上篇帖子: Cenntos6.3 安装openstack 下篇帖子: Neutron网络-OPENSTACK讲得比较透和方便
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表