Nova API服务之Nova API服务的启动

来源:互联网 发布:淘宝女童模特孙佳怡 编辑:程序博客网 时间:2024/06/07 01:21

Nova API的启动和工作流程。openstack的每个组件都提供API服务,用于接收和处理客户端的HTTP请求。

Nova API服务是一个RESTful API服务。

1、Nova API服务的启动

2、着重介绍与虚拟机资源有关的url请求的处理流程

3、虚拟机创建的HTTP请求处理过程

15.2.1 Nova API服务的启动

1、Nova API的地图引导: /etc/nova/api-paste.ini,可以知道URL路由走向和映射的类,应用程序,过滤器,管道

等。

<span style="font-size:18px;">############## OpenStack ##############[composite:osapi_compute]use = call:nova.api.openstack.urlmap:urlmap_factory  #urlmap:composite应用,使用路径前缀将你的请求和其他应用对应/: oscomputeversions/v1.1: openstack_compute_api_v21_legacy_v2_compatible/v2: openstack_compute_api_v21_legacy_v2_compatible/v2.1: openstack_compute_api_v21# NOTE: this is deprecated in favor of openstack_compute_api_v21_legacy_v2_compatible[composite:openstack_compute_api_legacy_v2]use = call:nova.api.auth:pipeline_factorynoauth2 = compute_req_id faultwrap sizelimit noauth2 legacy_ratelimit osapi_compute_app_legacy_v2keystone = compute_req_id faultwrap sizelimit authtoken keystonecontext legacy_ratelimit osapi_compute_app_legacy_v2keystone_nolimit = compute_req_id faultwrap sizelimit authtoken keystonecontext osapi_compute_app_legacy_v2[composite:openstack_compute_api_v21]use = call:nova.api.auth:pipeline_factory_v21noauth2 = compute_req_id faultwrap sizelimit noauth2 osapi_compute_app_v21keystone = compute_req_id faultwrap sizelimit authtoken keystonecontext osapi_compute_app_v21[composite:openstack_compute_api_v21_legacy_v2_compatible]use = call:nova.api.auth:pipeline_factory_v21noauth2 = compute_req_id faultwrap sizelimit noauth2 legacy_v2_compatible osapi_compute_app_v21keystone = compute_req_id faultwrap sizelimit authtoken keystonecontext legacy_v2_compatible osapi_compute_app_v21[filter:request_id]paste.filter_factory = oslo_middleware:RequestId.factory[filter:compute_req_id]paste.filter_factory = nova.api.compute_req_id:ComputeReqIdMiddleware.factory[filter:faultwrap]paste.filter_factory = nova.api.openstack:FaultWrapper.factory[filter:noauth2]paste.filter_factory = nova.api.openstack.auth:NoAuthMiddleware.factory[filter:legacy_ratelimit]paste.filter_factory = nova.api.openstack.compute.limits:RateLimitingMiddleware.factory[filter:sizelimit]paste.filter_factory = oslo_middleware:RequestBodySizeLimiter.factory[filter:legacy_v2_compatible]paste.filter_factory = nova.api.openstack:LegacyV2CompatibleWrapper.factory[app:osapi_compute_app_legacy_v2]paste.app_factory = nova.api.openstack.compute:APIRouter.factory[app:osapi_compute_app_v21]paste.app_factory = nova.api.openstack.compute:APIRouterV21.factory[pipeline:oscomputeversions]pipeline = faultwrap oscomputeversionapp[app:oscomputeversionapp]paste.app_factory = nova.api.openstack.compute.versions:Versions.factory</span>
可以得知,Nova API服务的主要功能是在osapi_compute_app_legacy_v2应用程序现。osapi_compute_app_legacy_v2

应用程序对应的工厂方法为 /nova/api/openstack/compute/__init__.py中 APIRouter类的factory方法。

类的作用:在openstack API上的路由请求合适的控制类和相对应的方法。

2、APIRouter(/nova/api/openstack/compute/__init__.py,继承父类的factory函数)类的factory方法创建了一个

APIRouter对象。在APIRouter类的初始化方法中调用了_setup_routes方法(子类中进行重写,发生覆盖。子类中

的父类成分)。查看APIRouter类的_setup_routes方法的定义:

class APIRouter(nova.api.openstack.APIRouter):  def _setup_routes(self, mapper, ext_mgr, init_only):    if init_only is None or 'consoles' in init_only or 'servers' in init_only or 'ips' in init_only:       self.resources['servers'] = v2_servers.create_resource(ext_mgr) #创建server资源的resource对象       mapper.resource("server", "servers",  #添加server资源的url映射                            controller=self.resources['servers'],                            collection={'detail': 'GET'},                            member={'action': 'POST'})

在_setup_routes方法中定义了许多Nova资源的url映射,上面代码是server资源的映射。Nova中,server资源其实就

是虚拟机资源。

以上代码可以看出,首先调用的是servers包的create_resource方法创建server资源的resource对象

调用mapper对象的resources方法添加server资源的url映射

3、mapper.connect方法添加资源的url映射。这里的mapper.resource方法的功能是将最基本url映射封装起来,url

映射集合,使得代码简洁。

如下的mapper.resource方法


实现的功能与如下代码段的功能相同:



message是成员名,messages是集合名。url映射称为标准的url映射。额外的url映射,可设置mapper.resource方法

的collection和member参数。额外的集合操作和额外的成员操作。

例如:


就是在标准url映射的基础上,添加如下的url映射:


4、servers包的create_resource方法,返回一个wsgi.Rpurce对象。

def create_resource(ext_mgr):    return wsgi.Resource(Controller(ext_mgr))
代码中的ext_mgr是一个ExtensionManger对象,用于实现Nova API的功能扩展。

5、wsgi.Resource对象可以是一个Controller对象,只是添加了消息的序列化和反序列化功能。



0 0