您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“ocata如何啟動nova-api服務”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“ocata如何啟動nova-api服務”這篇文章吧。
啟動nova的api服務時,需要調用nova-api命令,nova-api命令最終是調用nova.cmd.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()#服務阻塞
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服務”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。