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服务的启动相关推荐

  1. (四)浅谈OpenStack T版服务组件--Nova计算服务(#^.^#)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.Nova简介 1.Nova的概念 2.Nova系统架构 二.Nova组件详解 1.Nova--API 2.Nova--S ...

  2. windows api中文文档_Web服务开发:Spring集成Swagger,3步自动生成API文档

    目录: 1,Spring Boot集成Swagger 2,Swagger接口文档页面 3,常见问题和解决方法 在Sping开发REST接口服务时,API文档是不可缺少的一个重要部分.Swagger框架 ...

  3. [Google API](7)直接使用Web服务

    到目前为止,本教程一直在讨论通过 Java 应用程序使用 API 来达到 Google Web 服务的使用目的,但这只是一种方便的办法.可以直接通过 SOAP 消息(在 http://api.goog ...

  4. 可通过http获取远端服务信息_微服务基础——厉害了!API网关

    微服务刚刚诞生的时候,人们将服务进行拆分,实现服务之间的松耦合,并且每个服务有专门的团队维护,然后客户端直接和各个子服务进行交互.比如,订单,商品,会员服务. 那么这种客户端直接和后端服务交互的方式会 ...

  5. consul 日志配置_微服务:服务注册发现+ API 网关+配置中心+服务跟踪+服务熔断...

    服务注册发现 服务注册就是维护一个登记簿,它管理系统内所有的服务地址.当新的服务启动后,它会向登记 簿交待自己的地址信息.服务的依赖方直接向登记簿要 Service Provider 地址就行了.当下 ...

  6. Re:从 0 开始的微服务架构--(三)微服务架构 API 的开发与治理--转

    原文来自:聊聊架构公众号 前面的文章中有说到微服务的通信方式,Martin Folwer 先生在他对微服务的定义中也提到"每个服务运行在其独立的进程中,服务与服务间采用 轻量级的通信机制 互 ...

  7. ArcGIS JS API 4.X实现动态地图服务子图层显隐控制

    ArcGIS JS API 4.X实现动态地图服务子图层显隐控制 文章目录 ArcGIS JS API 4.X实现动态地图服务子图层显隐控制 使用场景 官网示例 注意事项 使用场景 图层控制功能 官网 ...

  8. 使用 golang 调用consul api 接口,注册user-tomcat服务

    1,关于consul dubbo的注册中心是zookeeper,redis.  motan的注册中心是zookeeper,consul.  kubernetes的注册中心是 etcd.  使用cons ...

  9. .NET微服务架构及API网关

    .NET微服务架构及API网关 原文:.NET微服务架构及API网关 一.MSA简介 1.1.MSA是什么 微服务架构MSA是Microservice Architecture的简称,它是一种架构模式 ...

  10. 认证鉴权与API权限控制在微服务架构中的设计与实现

    引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的第一篇,本系列预计四篇文章讲解微服务下的认证鉴权与API权限控制的实现. 1. 背景 最近在做权限相关服务的开发, ...

最新文章

  1. 从几十人小药厂走出的惊天抗癌神药
  2. 友盟-统计不到线上应用数据的坑
  3. Windows CE 6.0正式发布 源代码100%开放
  4. Spring之装配Bean(一)
  5. eslint 保存自动格式化_ESLint一款可组装的JavaScript和JSX检查工具
  6. 分享20个漂亮的DIV CSS标准化站点案例
  7. 【VBS】一款无聊的 Visual Basic Script 表白程序
  8. leetcode算法—两数相加 Add Two Numbers
  9. centos6.5建立cloudera-cdh4.6本地源
  10. 软考中高项学员:2016年3月26日作业
  11. 拓端tecdat|用R语言软件估计光谱密度
  12. ocx找不到指定模块
  13. 千万级数据查询中CK、ES、RediSearch方案的优化
  14. java基于ssh的旅游系统
  15. Python攻关之文件操作
  16. 看世界杯效应下的中东市场,开发攻略来了
  17. 武汉电博会看点 daydao电商云ERP亮相
  18. AFNetworking 使用说明
  19. Tableau 仪表板例子2
  20. 想了解API接口,这一篇就够了

热门文章

  1. Windows自带虚拟化服务工具Hyper-V学习了解和实操
  2. 为activity设置主题theme
  3. = =大家一起黑马忠啊
  4. 记录下UE4解决EQS Bug的过程
  5. 龙智集团赢得2022年Atlassian与AWS云销售竞赛
  6. 几个常用的、重要的网络命令!(ping,Tracert ,winipcfg等)
  7. 大数据平台的作用有什么
  8. 测试开发,测试架构师为什么能拿50 60k呢需要掌握哪些技能呢
  9. 7个无版权图库资源网站,全部高质量且免费,不愁找不到素材
  10. 如何将倒序改为正序C语言,快速排序(正序+倒序)C语言版