如何进行openstack组件nova代码解析

74次阅读
没有评论

共计 2403 个字符,预计需要花费 7 分钟才能阅读完成。

如何进行 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(Request >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(Request >nova.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(Request >

看完上述内容,你们掌握如何进行 openstack 组件 nova 代码解析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计2403字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)