共計 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 行業資訊頻道!
正文完