久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進行nova.api.openstack.APIRouterV21模塊的解析

171次閱讀
沒有評論

共計 3733 個字符,預計需要花費 10 分鐘才能閱讀完成。

如何進行 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 模塊的解析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注丸趣 TV 行業資訊頻道了解更多相關知識。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計3733字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 安国市| 武义县| 阳春市| 科技| 潢川县| 吉隆县| 区。| 兴义市| 余江县| 竹山县| 绿春县| 丰都县| 胶州市| 台北县| 石棉县| 浦东新区| 宁晋县| 桦川县| 香港| 怀集县| 北安市| 汝阳县| 红河县| 新闻| 浮梁县| 阳春市| 靖安县| 晋中市| 丰城市| 奉化市| 宜兰县| 独山县| 昭通市| 勃利县| 榕江县| 中方县| 四平市| 遵化市| 水城县| 铅山县| 基隆市|