如何进行openstack组件nova代码解析
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,如何进行openstack组件nova代码解析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。随手记录一下查看nova代码时的笔记。nov
千家信息网最后更新 2025年12月03日如何进行openstack组件nova代码解析
如何进行openstack组件nova代码解析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
随手记录一下查看nova代码时的笔记。nova.wsgi文件定义了wsgi功能组件的基类。
nova.wsgi.Application模块的解析
此类为wsgi app的基类:
class Application(object):"""WSGI应用程序基类封装. 子类需要实现__call__方法.""" @classmethod def factory(cls, global_config, **local_config):"""在paste.deploy配置文件中被调用 任何local配置 (即paste配置文件中[app:APPNAME]的值) 都将作为kwargs传递到 `__init__` 方法中。 假设的配置内容如下: [app:wadl] latest_version = 1.3 paste.app_factory = nova.api.fancy_api:Wadl.factory 这样就可以实现paste类似如下的方式调用Wadl类: import nova.api.fancy_api fancy_api.Wadl(latest_version='1.3') 当然,您可以在子类中重新实现`factory`方法,但是使用kwarg传递它应该是不必要的。 """ return cls(**local_config)def __call__(self, environ, start_response):""" 子类可以类似下面的内容去实现__call__: @webob.dec.wsgify(RequestClass=Request) def __call__(self, req): # 以下任何对象都可以作为responses: # Option 1: 简单字符串 res = 'message\n' # Option 2: 格式化良好的HTTP异常页面 res = exc.HTTPForbidden(explanation='Nice try') # Option 3: 一个webob Response object (需要处理header等内容...) res = Response() res.app_iter = open('somefile') # Option 4: 接下来运行的任何wsgi应用程序 res = self.application # Option 5: 可以为wsgi应用程序获取一个Response对象,以处理header等内容 res = req.get_response(self.application) # 也可以只返回response... return res # ... 或设置req.response然后返回None. req.response = res See the end of http://pythonpaste.org/webob/modules/dec.html for more info. """ raise NotImplementedError(_('You must implement __call__'))nova.wsgi.Router模块的解析
此类为nova路由器系统的基类:
class Router(object):"""此类是WSGI中间件,可以将传入请求映射到WSGI应用程序.""" def __init__(self, mapper):""" 为给定的routes.Mapper创建一个路由器. `mapper`中的每个路由必须指定一个'controller'。指定一个'action'并让控制器成为一个对象, 这样可以将请求路由到特定于action的方法。 Examples: mapper = routes.Mapper() sc = ServerController() # 一个路由到controller+action的显式映射 mapper.connect(None, '/svrlist', controller=sc, action='list') # Actions都是隐式定义的 mapper.resource('server', 'servers', controller=sc) # 指向任意的WSGI app. 可以指定{path_info:.*}参数, # 这样目标应用程序就可以只传递URL的这一部分。 mapper.connect(None, '/v1.0/{path_info:.*}', controller=BlogApp()) """ self.map = mapperself._router = routes.middleware.RoutesMiddleware(self._dispatch, self.map) @webob.dec.wsgify(RequestClass=Request)def __call__(self, req):""" 将传入请求路由到基于self.map的控制器。 如果不匹配,返回404。 """ return self._router@staticmethod @webob.dec.wsgify(RequestClass=Request)def _dispatch(req):""" 将请求分派到适当的控制器。 将传入请求与路由匹配并将信息放入 req.environ 由self._router调用。 """ match = req.environ['wsgiorg.routing_args'][1]if not match:return webob.exc.HTTPNotFound()app = match['controller']return appnova.wsgi.Middleware模块的解析
class Middleware(Application):""" WSGI中间件基类. #这些类需要初始化一个应用程序,该应用程序将在下一步调用。 #默认情况下,中间件只调用其封装的应用程序,或者可以重载__call__ 方法来自定处理行为。 """ @classmethod def factory(cls, global_config, **local_config):"""在paste.deploy配置文件中被调用 任何local配置 (即paste配置文件中[app:APPNAME]的值) 都将作为kwargs传递到 `__init__` 方法中。 假设的配置内容如下: [filter:analytics] redis_host = 127.0.0.1 paste.filter_factory = nova.api.analytics:Analytics.factory可以实现如python调用 `Analytics` 类方式行为,如下所示: import nova.api.analytics analytics.Analytics(app_from_paste, redis_host='127.0.0.1') 当然,您可以在子类中重新实现`factory`方法 """ def _factory(app):return cls(app, **local_config)return _factorydef __init__(self, application):self.application = applicationdef process_request(self, req):"""在每个request中调用. #如果它不返回任何值,则继续执行堆栈中的下一个应用程序。 #如果它返回一个响应,那么该响应将被返回,执行将在这里停止。 """ return None def process_response(self, response):"""返回response前可以进行一些预处理.""" return response @webob.dec.wsgify(RequestClass=Request)def __call__(self, req): response = self.process_request(req)#调用此方法处理api请求if response:return response #如果有响应则返回,一般情况有response代表着有异常 response = req.get_response(self.application)#执行wsgi 应用程序获取响应return self.process_response(response)#调用此方法预处理响应。
看完上述内容,你们掌握如何进行openstack组件nova代码解析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
应用程序
程序
应用
方法
配置
内容
路由
文件
子类
处理
代码
组件
中间件
对象
控制器
模块
控制
情况
方式
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
小度属于哪家互联网科技公司
当前学生网络安全意识
网络安全专业人员实用书籍
服务器硬盘灯一直闪烁是怎么回事
我的世界怎么自己创建1.17服务器
吉林网络技术转让平均价格
网络安全与黑客技术ppt
qt连接数据库oracle
现代化软件开发设计规范
杭州计算机软件开发怎么样
金华公司网络安全准入控制哪家好
数据库的编辑器有哪些
网络安全一题一案
安徽数据网络技术开发咨询报价
服务器卖钱
网络安全推荐股
建立费用发生数据库
服务器启动电脑显示屏没反应
第五章数据库安全保护
oracle数据库登录账号密码
外网三大数据库
lol新服务器s7
软件开发团队年度工作计划
服务器显示器水波纹
安徽数据网络技术开发咨询报价
互联网黑科技干货满满
何玉洁数据库网课视频
扬州市网络安全和信息化
数据库中的静态库存
瀑布式软件开发生命周期