openstack核心路由和擴充套件路由及路由對應的api函式呼叫流程分析
阿新 • • 發佈:2019-01-22
找到對應的url為server的routes:
由之前文章對wsgi的route對映關係分析可以,對應程式碼為該controller的create()方法:詳情請自行參考文章:wsgi-restful-routes詳解
至此則到達了nova模組的底層create()api呼叫。
3、鑑於openstack釋出路由的有多個種類:核心路由釋出,擴充套件路由釋出,接下來對此進行補充詳解:
首先對上述步驟中的routes與controller的關係進行一個總結:
第一步假若找到了對應的路由例如:
那麼接下來該如何找到該路由的釋出檔案程式碼呢?
在openstack框架中釋出route的程式碼有兩種:
第一種核心路由釋出:(其中Eclipse截圖的上邊框顯示了對應的檔案路徑 )
核心路由釋出,則自動對應了給路由的CURD(增刪查改)核心操作,即create、delete、index、show,update。(這些由route框架自動生成對應)
注:以本處的servers釋出為例:create、delete、index、show,update這五個方法有routes框架自動生成對映關係。detail方法則是自定義方法。因此
假若需要自定義方法時,可參考本處的detail方法進行新增。
第二種擴充套件路由釋出:
4、當novaclient傳送的url找到對應的route,接下來route會根據url的欄位,以及url傳送方式(eg:POST、GET、PUT等),在對應的
controller找到對應的方法執行:
以建立虛擬機器路由舉例說明:
POST /{project_id}/servers
根據下圖對應關係,此處應該呼叫controller裡面的create()方法。
假若路由是: GET /{project_id}/servers/1/my_edit
則會呼叫controller裡面的my_edit()方法。
5、接下來的問題就是根據route如何找到對應的controller類:
第一種核心路由釋出的controller類對應位置:
尋找對應的controller=self.resources['servers'],的controller類:
第二種擴充套件路由釋出的controller類對應位置:
其他/usr/lib/python2.6/site-packages/nova/api/openstack/compute/contrib/目錄下的擴充套件路由controller就在自身資料夾。
以os-networks為例:
尋找對應的NetworkController()類:
只要確定了controller位置,即可以知道route對映過來的url將會呼叫controller類裡面的哪一個函式。到此路由對應的api函式呼叫流程分析結束。