1. 程式人生 > >openstack核心路由和擴充套件路由及路由對應的api函式呼叫流程分析

openstack核心路由和擴充套件路由及路由對應的api函式呼叫流程分析

找到對應的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函式呼叫流程分析結束。