如何进行nova.api.openstack.APIRouterV21模块的解析
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,如何进行nova.api.openstack.APIRouterV21模块的解析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。nov
千家信息网最后更新 2025年02月02日如何进行nova.api.openstack.APIRouterV21模块的解析
如何进行nova.api.openstack.APIRouterV21模块的解析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
nova.api.openstack.APIRouterV21模块的解析:
from nova import wsgi as base_wsgi class APIRouterV21(base_wsgi.Router):""" 将OpenStack v2.1 API上的请求路由到适当的控制器和方法。 """ @classmethod def factory(cls, global_config, **local_config):"""paste factory 方法, 在/etc/nova/api-paste.ini里的[app:osapi_compute_app_v21]调用""" return cls()@staticmethod def api_extension_namespace(): """定义插件命名空间 """ return 'nova.api.v21.extensions' def __init__(self):def _check_load_extension(ext):return self._register_extension(ext) #通过stevedore 动态加载插件self.api_extension_manager = stevedore.enabled.EnabledExtensionManager(namespace=self.api_extension_namespace(),check_func=_check_load_extension,invoke_on_load=True,invoke_kwds={"extension_info": self.loaded_extension_info}) mapper = ProjectMapper()#Routes映射器,此类是nova对routes.Mapper的继承重载self.resources = {}# 核心API支持被重写为扩展, 但在概念上仍然具有核心性 if list(self.api_extension_manager):# 如果没有检测到插件,Stevedore将引发异常。 self._register_resources_check_inherits(mapper)self.api_extension_manager.map(self._register_controllers) LOG.info(_LI("Loaded extensions: %s"), sorted(self.loaded_extension_info.get_extensions().keys()))super(APIRouterV21, self).__init__(mapper)def _register_resources_list(self, ext_list, mapper):for ext in ext_list:self._register_resources(ext, mapper)def _register_resources_check_inherits(self, mapper): ext_has_inherits = [] ext_no_inherits = []for ext in self.api_extension_manager:for resource in ext.obj.get_resources():if resource.inherits: ext_has_inherits.append(ext)break else: ext_no_inherits.append(ext)self._register_resources_list(ext_no_inherits, mapper)self._register_resources_list(ext_has_inherits, mapper)@property def loaded_extension_info(self):raise NotImplementedError()def _register_extension(self, ext):raise NotImplementedError()def _register_resources(self, ext, mapper):""" 注册由extensions定义的资源 Extensions通过get_resources函数定义要添加的资源 """ handler = ext.obj LOG.debug("Running _register_resources on %s", ext.obj)for resource in handler.get_resources(): LOG.debug('Extended resource: %s', resource.collection) inherits = None if resource.inherits: inherits = self.resources.get(resource.inherits)if not resource.controller: resource.controller = inherits.controller wsgi_resource = wsgi.ResourceV21(resource.controller, inherits=inherits)self.resources[resource.collection] = wsgi_resource kargs = dict(controller=wsgi_resource,collection=resource.collection_actions,member=resource.member_actions)if resource.parent: kargs['parent_resource'] = resource.parent# 非核心api插件使用collection名称作为member名称, # 但是core-API插件对member/collection名称使用单复数约定 if resource.member_name: member_name = resource.member_nameelse: member_name = resource.collection mapper.resource(member_name, resource.collection, **kargs)if resource.custom_routes_fn: resource.custom_routes_fn(mapper, wsgi_resource)def _register_controllers(self, ext):""" 注册由extensions定义的控制器 通过get_controller_extensions函数Extensions定义要添加的资源""" handler = ext.obj LOG.debug("Running _register_controllers on %s", ext.obj)for extension in handler.get_controller_extensions(): ext_name = extension.extension.name collection = extension.collection controller = extension.controllerif collection not in self.resources: LOG.warning(_LW('Extension %(ext_name)s: Cannot extend ' 'resource %(collection)s: No such resource'), {'ext_name': ext_name, 'collection': collection})continue LOG.debug('Extension %(ext_name)s extending resource: ' '%(collection)s', {'ext_name': ext_name, 'collection': collection}) resource = self.resources[collection] resource.register_actions(controller) resource.register_extensions(controller)
关于如何进行nova.api.openstack.APIRouterV21模块的解析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
插件
模块
名称
方法
资源
问题
函数
控制器
更多
核心
帮助
控制
解答
易行
适当
简单易行
内容
动态
单复数
射器
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
查看数据库启动停止日志
手机能管理阿里云服务器吗
乐学邦网络技术有限公司
jst 日本数据库
打造一支网络安全
戴尔服务器管理地址怎么设置
连接更新服务器失败请检查网络
无限法则怎么连接不上服务器
线上数据库只能半夜查询
域服务器管理教程
数据库中怎么查看函数的信息
游戏服务器面试题
苏州软件开发app
科技猿人互联网
深圳系统软件开发价格表
数据库驱动包
山西学业考试管理端服务器地址
中国银行it和软件开发中心
软件开发与国外的差距
服务器租用网络安全
与校园网络安全有关的作文
长沙鹤岗app软件开发
jst 日本数据库
软件开发系统个人心得
大数据中心服务器
网站数据库和源码备份
服务器水冷
数据库生成库存表
数据库结构与算法工程师
数据库驱动包