如何进行nova.api.openstack.APIRouterV21模块的解析
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,如何进行nova.api.openstack.APIRouterV21模块的解析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。nov
千家信息网最后更新 2025年12月03日如何进行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安全错误
数据库的锁怎样保障安全
服务器网络压测
人民公安大学信息网络安全学院
互联网保险 保险科技
枣庄管理软件开发哪家便宜
影视视频服务器
露娜下载软件开发
教育部 安全数据库
山东网络安全中心招聘
数据库建好表格无法保存
哈尔滨MAC软件开发
安全服务器vac
互联网科技圈专业
电力监控系统网络安全定级
互联网2021领先科技成果
沈阳市医药软件开发公司
软件开发职校学费
虹客网络技术客服电话
网络安全与执法专业好学吗
高斯数据库如何获取表的建表语句
如何减少服务器运行风险
叛乱沙暴服务器连接失败
为什么实施工程师需要数据库
网络安全与执法待遇
软件开发手册怎么收费
服务器安装vps
关于网络安全的心得体会50字
证券公司数据库开发
计算机三级网络技术上机模拟
高斯数据库如何获取表的建表语句
服务器apache配置