Nova API服务之Nova API服务的启动
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_factory
noauth2 = compute_req_id faultwrap sizelimit noauth2 legacy_ratelimit osapi_compute_app_legacy_v2
keystone = compute_req_id faultwrap sizelimit authtoken keystonecontext legacy_ratelimit osapi_compute_app_legacy_v2
keystone_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_v21
noauth2 = compute_req_id faultwrap sizelimit noauth2 osapi_compute_app_v21
keystone = 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_v21
noauth2 = compute_req_id faultwrap sizelimit noauth2 legacy_v2_compatible osapi_compute_app_v21
keystone = 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对象,只是添加了消息的序列化和反序列化功能。
Nova API服务之Nova API服务的启动相关推荐
- (四)浅谈OpenStack T版服务组件--Nova计算服务(#^.^#)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.Nova简介 1.Nova的概念 2.Nova系统架构 二.Nova组件详解 1.Nova--API 2.Nova--S ...
- windows api中文文档_Web服务开发:Spring集成Swagger,3步自动生成API文档
目录: 1,Spring Boot集成Swagger 2,Swagger接口文档页面 3,常见问题和解决方法 在Sping开发REST接口服务时,API文档是不可缺少的一个重要部分.Swagger框架 ...
- [Google API](7)直接使用Web服务
到目前为止,本教程一直在讨论通过 Java 应用程序使用 API 来达到 Google Web 服务的使用目的,但这只是一种方便的办法.可以直接通过 SOAP 消息(在 http://api.goog ...
- 可通过http获取远端服务信息_微服务基础——厉害了!API网关
微服务刚刚诞生的时候,人们将服务进行拆分,实现服务之间的松耦合,并且每个服务有专门的团队维护,然后客户端直接和各个子服务进行交互.比如,订单,商品,会员服务. 那么这种客户端直接和后端服务交互的方式会 ...
- consul 日志配置_微服务:服务注册发现+ API 网关+配置中心+服务跟踪+服务熔断...
服务注册发现 服务注册就是维护一个登记簿,它管理系统内所有的服务地址.当新的服务启动后,它会向登记 簿交待自己的地址信息.服务的依赖方直接向登记簿要 Service Provider 地址就行了.当下 ...
- Re:从 0 开始的微服务架构--(三)微服务架构 API 的开发与治理--转
原文来自:聊聊架构公众号 前面的文章中有说到微服务的通信方式,Martin Folwer 先生在他对微服务的定义中也提到"每个服务运行在其独立的进程中,服务与服务间采用 轻量级的通信机制 互 ...
- ArcGIS JS API 4.X实现动态地图服务子图层显隐控制
ArcGIS JS API 4.X实现动态地图服务子图层显隐控制 文章目录 ArcGIS JS API 4.X实现动态地图服务子图层显隐控制 使用场景 官网示例 注意事项 使用场景 图层控制功能 官网 ...
- 使用 golang 调用consul api 接口,注册user-tomcat服务
1,关于consul dubbo的注册中心是zookeeper,redis. motan的注册中心是zookeeper,consul. kubernetes的注册中心是 etcd. 使用cons ...
- .NET微服务架构及API网关
.NET微服务架构及API网关 原文:.NET微服务架构及API网关 一.MSA简介 1.1.MSA是什么 微服务架构MSA是Microservice Architecture的简称,它是一种架构模式 ...
- 认证鉴权与API权限控制在微服务架构中的设计与实现
引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的第一篇,本系列预计四篇文章讲解微服务下的认证鉴权与API权限控制的实现. 1. 背景 最近在做权限相关服务的开发, ...
最新文章
- 从几十人小药厂走出的惊天抗癌神药
- 友盟-统计不到线上应用数据的坑
- Windows CE 6.0正式发布 源代码100%开放
- Spring之装配Bean(一)
- eslint 保存自动格式化_ESLint一款可组装的JavaScript和JSX检查工具
- 分享20个漂亮的DIV CSS标准化站点案例
- 【VBS】一款无聊的 Visual Basic Script 表白程序
- leetcode算法—两数相加 Add Two Numbers
- centos6.5建立cloudera-cdh4.6本地源
- 软考中高项学员:2016年3月26日作业
- 拓端tecdat|用R语言软件估计光谱密度
- ocx找不到指定模块
- 千万级数据查询中CK、ES、RediSearch方案的优化
- java基于ssh的旅游系统
- Python攻关之文件操作
- 看世界杯效应下的中东市场,开发攻略来了
- 武汉电博会看点 daydao电商云ERP亮相
- AFNetworking 使用说明
- Tableau 仪表板例子2
- 想了解API接口,这一篇就够了