1. 程式人生 > >執行openstack flavor list後nova組件接收請求

執行openstack flavor list後nova組件接收請求

請求 admin 做了 需要 響應 有關 trac -c auth

執行openstack flavor list後,通過在/nova/api/openstack/compute/flavors.py中FlavorsController類detail()方法添加斷點,具體如下:

    def detail(self, req):
        """Return all flavors in detail."""
        import pydevd
        pydevd.settrace(‘localhost‘, port=12345, stdoutToServer=True, stderrToServer=True)
        limited_flavors 
= self._get_flavors(req) #調用方法從數據庫裏獲取到flavors req.cache_db_flavors(limited_flavors) #。。。 return self._view_builder.detail(req, limited_flavors) #_view_builder是一個class ViewBuilder(common.ViewBuilder)對象,在views/flavors.py文件中

可以獲取到,nova是如何查詢到flavors並返回給client。

首先,我們查看req請求包含的內容:

GET /compute/v2.1/flavors/detail HTTP/1.1
Accept: application
/json Accept-Encoding: gzip, deflate Connection: keep-alive Content-Length: 0 Host: 192.168.72.192 User-Agent: python-novaclient X-Auth-Token: gAAAAABacqw9UtQcB8_Mwcjp72aGSy0amSoOX7rj0TO1m1wehcY9Oz3Rcppc4i1iv59J49NGk3Mms-t9BuV0MmOEaQQFXbcr2ImnY6ATDbctEn8Ve13rbv1yUaIgqTKdK5X0oLMzyaWcs5ORqAj0eAB0McQOlvVa5MZvuFxbm8k3uPHKEmW71Ac X
-Domain-Id: None X-Domain-Name: None X-Identity-Status: Confirmed X-Is-Admin-Project: True X-Project-Domain-Id: default X-Project-Domain-Name: Default X-Project-Id: 220a18a8c961468f93f1d5b81de9774f X-Project-Name: demo X-Role: Member,anotherrole X-Roles: Member,anotherrole X-Service-Catalog: [{"endpoints": [{"region": "RegionOne", "publicURL": "http://192.168.72.192/compute/v2/220a18a8c961468f93f1d5b81de9774f"}], "type": "compute_legacy", "name": "nova_legacy"}, {"endpoints": [{"region": "RegionOne", "publicURL": "http://192.168.72.192:9696/"}], "type": "network", "name": "neutron"}, {"endpoints": [{"adminURL": "http://192.168.72.192/identity", "region": "RegionOne", "publicURL": "http://192.168.72.192/identity"}], "type": "identity", "name": "keystone"}, {"endpoints": [{"region": "RegionOne", "publicURL": "http://192.168.72.192/volume/v1/220a18a8c961468f93f1d5b81de9774f"}], "type": "volume", "name": "cinder"}, {"endpoints": [{"region": "RegionOne", "publicURL": "http://192.168.72.192/placement"}], "type": "placement", "name": "placement"}, {"endpoints": [{"region": "RegionOne", "publicURL": "http://192.168.72.192/volume/v3/220a18a8c961468f93f1d5b81de9774f"}], "type": "volumev3", "name": "cinderv3"}, {"endpoints": [{"region": "RegionOne", "publicURL": "http://192.168.72.192/compute/v2.1"}], "type": "compute", "name": "nova"}, {"endpoints": [{"region": "RegionOne", "publicURL": "http://192.168.72.192/volume/v2/220a18a8c961468f93f1d5b81de9774f"}], "type": "volumev2", "name": "cinderv2"}, {"endpoints": [{"region": "RegionOne", "publicURL": "http://192.168.72.192/image"}], "type": "image", "name": "glance"}] X-Tenant: demo X-Tenant-Id: 220a18a8c961468f93f1d5b81de9774f X-Tenant-Name: demo X-User: demo X-User-Domain-Id: default X-User-Domain-Name: Default X-User-Id: 159ceecc04924edd95f698e28772929b X-User-Name: demo

使用了GET方法,具體的url=/compute/v2.1/flavors/detail,X-Auth-Token應該是keystone給的token認證。X-***給出的是一些工程、租戶、用戶等相關的信息。然後,使用limited_flavors=self._get_flavors(req)獲取到flavors的信息,return self._view_builder.detail(req, limited_flavors)對返回的flavor信息做了進一步處理,滿足返回請求的需要。

本文的分析沒有關註wsgi框架中如何載入app,以及如何建立RESTFUL框架的問題,而是直接從請求APP入口去分析openstack組件將如何去響應各種請求。

關於不同請求是如何與相應app對應,在後續介紹。

執行openstack flavor list後nova組件接收請求