共计 4884 个字符,预计需要花费 13 分钟才能阅读完成。
这篇文章主要为大家展示了“ocata 如何启动 nova-api 服务”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“ocata 如何启动 nova-api 服务”这篇文章吧。
启动 nova 的 api 服务时,需要调用 nova-api 命令,nova-api 命令最终是调用 nova.cmd.api 模块里的 main 方法。
nova-api 命令的 main 方法解析:
def main():
config.parse_args(sys.argv)# 此方法会解析命令行传入进来的参数(sys.argv), 配置文件的参数管理使用 oslo.config 模块进行管理。 logging.setup(CONF, nova)# 调用 solo.log 模块建立 nova 域的日志空间
utils.monkey_patch()# 此方法会根据配置文件里的 monkey_path 参数来确定是否对某些模块打补丁。 objects.register_all()# 注册所有需要的模块对象 if osapi_compute in CONF.enabled_apis:# 这里对于缓存 nova-compute 服务版本是必要的,当使用网络 ID 为 auto 或 none,发出服务器创建请求时,将会查找该版本。 objects.Service.enable_min_version_cache()
log = logging.getLogger(__name__)# 构建获取 logger
gmr.TextGuruMeditation.setup_autorun(version)# 使用 oslo.reports 模块来管理收集错误报告
launcher = service.process_launcher()# 获取 oslo.service 模块的服务启动实例
started = 0 for api in CONF.enabled_apis:# 定义了 api-paste.ini 两个默认的 sections 名, 分别为 osapi_compute,metadata
should_use_ssl = api in CONF.enabled_ssl_apistry:
server = service.WSGIService(api, use_ssl=should_use_ssl)# 遍历启 wsgi 服务实例,会根据 api-paste.ini 配置文件加载 app
launcher.launch_service(server, workers=server.workers or 1)
started += 1 except exception.PasteAppNotFound as ex:
log.warning( _LW( %s. ``enabled_apis`` includes bad values. Fix to remove this warning.), ex)if started == 0:
log.error(_LE( No APIs were started. Check the enabled_apis config option.))
sys.exit(1)
launcher.wait()# 服务阻塞
api-paste.ini 解析:
pasteDeploy 通过文件配置的方式将各个功能以模块化的方式组装在一起。这样做的好处是把各个功能特性分块化后方便组装与拆卸,起到了松耦合的作用。
############# Metadata #############[composite:metadata]use = egg:Paste#urlmap # 调用 paste 模块的 urlmap 来转发 URL,配置文件中的 enabled_apis 的其中一个默认值就是 metadata
/: meta #将 / 的路径转发到 [pipeline:meta] 处理,: 号也可以换成 = 号来映射[pipeline:meta]pipeline = cors metaapp[app:metaapp]paste.app_factory = nova.api.metadata.handler:MetadataRequestHandler.factory############## OpenStack ##############[composite:osapi_compute] # 这里的 url 路径映射是使用: 号,也可以换成 = 号来代替
use = call:nova.api.openstack.urlmap:urlmap_factory # 这里 nova 自定义了 urlmap 工厂来处理 URL,配置文件中的 enabled_apis 的其中一个默认值就是 osapi_compute
/: oscomputeversions # 将 / 的路径转发到 [pipeline:oscomputeversions] 处理 # v21 是与 v2 完全匹配的功能,但它在 wsgi 表面上具有更严格的输入验证(防止 API 早期模糊化)。# 它还通过 API 微版本提供了新功能,这些微版本可供客户选择。不知情的客户端将接收到相同的冻结 v2 API 特性集,但有一些宽松的验证 /v2: openstack_compute_api_v21_legacy_v2_compatible # 将 /v2 开头的 url 转到 [composite:openstack_compute_api_v21_legacy_v2_compatible] 处理
/v2.1: openstack_compute_api_v21 # 将 /v2.1 开头的 url 转到 [composite:openstack_compute_api_v21] 处理[composite:openstack_compute_api_v21]
#调用自定义的 composite 工厂方法。方法里会根据配置文件的认证策略来决定加载下面哪一种应用, 默认加载 keystone, 也可以将配置文件里的 auth_strategy 设置为 noauth3。use = call:nova.api.auth:pipeline_factory_v21
#在 noauth3 和 keystone 配置里不同的地方是 noauth3 和 authtoken 这两个认证 filter,authtoken 会先进行 keystone 登陆验证
noauth3 = cors http_proxy_to_wsgi compute_req_id faultwrap sizelimit osprofiler noauth3 osapi_compute_app_v21keystone = cors http_proxy_to_wsgi compute_req_id faultwrap sizelimit osprofiler authtoken keystonecontext osapi_compute_app_v21[composite:openstack_compute_api_v21_legacy_v2_compatible]use = call:nova.api.auth:pipeline_factory_v21noauth3 = cors http_proxy_to_wsgi compute_req_id faultwrap sizelimit osprofiler noauth3 legacy_v2_compatible osapi_compute_app_v21keystone = cors http_proxy_to_wsgi compute_req_id faultwrap sizelimit osprofiler authtoken keystonecontext legacy_v2_compatible osapi_compute_app_v21[filter:request_id]
# 它确保为每个 API 请求分配请求 ID 并将其设置到 request environment。请求 ID 也被添加到 API 响应中。 paste.filter_factory = oslo_middleware:RequestId.factory # 确保请求 ID 的中间件[filter:compute_req_id]
# 它确保为每个请求到 compute 服务的 api 分配请求 ID 并将其设置到 request environ。请求 ID 也被添加到 API 响应中。paste.filter_factory = nova.api.compute_req_id:ComputeReqIdMiddleware.factory[filter:faultwrap]paste.filter_factory = nova.api.openstack:FaultWrapper.factory[filter:noauth3]paste.filter_factory = nova.api.openstack.auth:NoAuthMiddleware.factory[filter:osprofiler]paste.filter_factory = nova.profiler:WsgiMiddleware.factory[filter:sizelimit]paste.filter_factory = oslo_middleware:RequestBodySizeLimiter.factory # 限制传入请求的大小的中间件。 [filter:http_proxy_to_wsgi]
# 此中间件使用远程 HTTP 反向代理提供的环境变量重载 WSGI 环境变量。 paste.filter_factory = oslo_middleware.http_proxy_to_wsgi:HTTPProxyToWSGI.factory # 到 WSGI 终止中间件的 HTTP 代理。 [filter:legacy_v2_compatible]paste.filter_factory = nova.api.openstack:LegacyV2CompatibleWrapper.factory[app:osapi_compute_app_v21]paste.app_factory = nova.api.openstack.compute:APIRouterV21.factory[pipeline:oscomputeversions]pipeline = cors faultwrap http_proxy_to_wsgi oscomputeversionapp[app:oscomputeversionapp]paste.app_factory = nova.api.openstack.compute.versions:Versions.factory########### Shared ###########[filter:cors]
# 这个中间件允许 WSGI 应用程序为多个配置的域提供 CORS 报头.paste.filter_factory = oslo_middleware.cors:filter_factory # CORS 中间件 oslo_config_project = nova[filter:keystonecontext]paste.filter_factory = nova.api.auth:NovaKeystoneContext.factory[filter:authtoken]paste.filter_factory = keystonemiddleware.auth_token:filter_factory
以上是“ocata 如何启动 nova-api 服务”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!
正文完