OpenStack PasteDeploy

Paste Deploy是一个WSGI工具包,对WSGI进行了一些包装,使之更易使用。对外提供WSGI服务,配置信息在etc目录下的api-paste.ini文件,下图是openstack nova项目的api-paste.ini文件示例
在这里插入图片描述
由图可以看出api-paste有四种不同的配置composite、app、filter、pipeline。

配置说明 composite

composite用于实现复杂的应用程序,可以进行分支选择,将一个请求调度定向多个app上,通过自定义或默认的urlmap来将请求调度到应用上。或者定义处理请求的流水线。
在这里插入图片描述
如图所示,openstack_compute_api_v21中处理所有虚拟机的请求,genuine配置文件配置需要使用keystone进行认证,所以会在第三个app进行处理,第三个app采用管道形式,将多个app组合
keystone = cors compute_req_id faultwrap sizelimit authtoken keystonecontext osapi_compute_app_v21
在这里插入图片描述并且cors compute_req_id faultwrap sizelimit authtoken keystonecontext这些都是配置定义的filter检查,只有osapi_compute_app_v21配置定义为app。

配置说明 app

声明一个应用,用于处理请求,表示该请求的处理类。如果xxx为main表示只有一个。
表示处理请求的对象通过指定路径的方法获得。
nova的配置文件中,根据上文定义osapi_compute_app_v21为app
在这里插入图片描述
配置项中指明处理类为nova.api.openstack.compute:APIRouterV21.factory

配置说明 filter

filter配置表示对请求进行pre handle和post handle。例如用户验证,准备服务器环境
在这里插入图片描述

配置说明 pipeline

pipeline配置从UNIX系统的pipeline发展而来,表示请求由一连串app或filter处理,并最终获得结果。由若干个filter和1个app组成。通过pipeline,可以很容易定制WSGI服务
在这里插入图片描述

查找过程

nova api-paste.ini配置文件内容如下

############
# Metadata #
############
[composite:metadata]
use = egg:Paste#urlmap
/: meta

[pipeline:meta]
pipeline = cors metaapp

[app:metaapp]
paste.app_factory = nova.api.metadata.handler:MetadataRequestHandler.factory

#############
# OpenStack #
#############

[composite:osapi_compute]
use = call:nova.api.openstack.urlmap:urlmap_factory
/: oscomputeversions
/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 = cors compute_req_id faultwrap sizelimit noauth2 legacy_ratelimit osapi_compute_app_legacy_v2
keystone = cors compute_req_id faultwrap sizelimit authtoken keystonecontext legacy_ratelimit osapi_compute_app_legacy_v2
keystone_nolimit = cors 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 = cors compute_req_id faultwrap sizelimit noauth2 osapi_compute_app_v21
keystone = cors 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 = cors compute_req_id faultwrap sizelimit noauth2 legacy_v2_compatible osapi_compute_app_v21
keystone = cors 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

##########
# Shared #
##########

[filter:cors]
paste.filter_factory = oslo_middleware.cors:filter_factory
oslo_config_project = nova

[filter:keystonecontext]
paste.filter_factory = nova.api.auth:NovaKeystoneContext.factory

[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory

首先因为没有main,根据openstack的请求osapi_compute,会自动跳转到section[composite:osapi_compute]中。
在该section中根据请求的url中版本号决定跳转到不同的section。
v2版本的请求跳转到section【openstack_compute_api_v21_legacy_v2_compatible】
v2.1版本的请求跳转到section【openstack_compute_api_v21】
如下图所示
在这里插入图片描述
url请求的版本见api
在这里插入图片描述
在openstack_compute_api_v21的section中,根据配置文件的keystone类型,进行keyston对应的管道任务处理,并最终跳转到app:osapi_compute_app_v21进行处理

app:osapi_compute_app_v21中根据配置的nova.api.openstack.compute:APIRouterV21.factory进行处理,然后进入nova的对应python文件中进行执行追踪。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值