openstack-wsgi的route中添加api流程具體解釋(os-networks)添加

感謝朋友支持本博客。歡迎共同探討交流,由於能力和時間有限,錯誤之處在所不免。歡迎指正!python

若有轉載,請保留源做者博客信息。json


Better Me的博客blog.csdn.net/tantexian

如需交流,歡迎你們博客留言。vim

在前面文章中,已經具體介紹了。怎樣從頁面dashboard調用novaclient而後生成一個url地址 。 或從啓動nova --debug list 而後調用novaclient而後生成URL地址

url地址形如: GET /v2/b077619bde964a4eb924db869fba977d/servers/detail

今天文章中要解說的是當咱們之後生成了這樣一個url了,下一步wsgi框架又是怎樣依據url去調用nova底層對應的代碼。


解說這個以前,先回顧下查看routes已公佈的api。

不少其它詳情請查看文章:openstack_ice之wsgi具體解釋(paste從ini配置文件->routesr具體公佈流程)api


一、首先將route mapper打印信息出來:
vim /usr/lib/python2.6/site-packages/nova/api/openstack/__init__.py

從新啓動openstack-nova-api服務bash

service  openstack-nova-api restart
tailf /var/log/nova/api.log
以上打印的route信息,就是底層經過wsgi,將api以加入到route的mapper。公佈給外邊調用。

二、接下來解說怎樣加入本身定義api,並加入到route mapper中,公佈出來給外部調用.
注:接下來以網絡模塊爲例,添加一個test_api接口。

下圖爲未加入前,network的route信息:

經過以前的文章分析,找到wsgi的入口:
vim /usr/lib/python2.6/site-packages/nova/api/openstack/compute/contrib/os_networks.py

os_network爲openstack封裝的,用來添加映射route mapper路由的類:

中加入下圖代碼:test_member:post、test_collection:
每次加入完畢需要又一次公佈需要從新啓動openstack-nova-api服務。
從新啓動後查看os-network路由信息例如如下圖:

如上圖發現test_member、test_collection路由信息公佈成功。

member_actions公佈的api是針對每個特定的對象,好比獲取id爲1的person全部信息。

所以需要在url前面添加id字段屬性。restful

collection_actions公佈的api是針對對象集合,好比獲取所有person的信息。

跟多關於route信息請參考文章wsgi-restful-routes具體解釋

三、解說:公佈api成功,後臺的route控制器接收到匹配的url以後。怎樣控制調用後臺代碼
url的產生大體有三種方式:
1:用dashboard經過novaclient組裝。(網絡的由neutronclient組裝,簡單起見,興許文章默認僅僅說起novaclient)
2:經過系統命令好比nova list產生。
3:經過curl本身組裝。

第一和另一種方式。請參考以前相應文章具體解釋。

接下來具體介紹下假設經過curl調用已公佈的route,開發本身定義api。網絡

注:底層api開發。多採用第三種方式進行。


第一步獲取token:
運行nova --debug list:
當中X-Auth-Token後面的值爲需要獲取的token。
第二步:
將token值加入到環境變量中(也可以不加入環境變量,每次請求時帶上)
vim  vim .bashrc

這樣之後就可以直接使用$token獲取token的值。
export .bashrc文件
echo $token將看到token值

第三步:發送url請求:
curl -i 'http://192.168.1.158:8774/v2/b077619bde964a4eb924db869fba977d/servers/f664204b-d4ec-4d01-aec9-757719a8d06b' -X GET -H "X-Auth-Project-Id: admin" -H "User-Agent: python-novaclient" -H "Accept: application/json" -H "X-Auth-Token:$token"

相應的route爲:

當運行上述url請求時候:則相應找到上述路由。


四、請求本身定義的路由test_collection:
依據路由信息,拼接url爲:

curl -i 'http://192.168.1.158:8774/v2/b077619bde964a4eb924db869fba977d/os-networks/test_collection' -X POST -H "X-Auth-Project-Id: admin" -H "User-Agent: python-novaclient" -H "Accept: application/json" -H "X-Auth-Token:$token"
錯誤爲404沒有找到:

打開route公佈源代碼:
vim /usr/lib/python2.6/site-packages/nova/api/openstack/compute/contrib/os_networks.py

進入到路由控制器:NetworkController():
可以看到路由控制器類有方法show(),delete()等。
在控制器類定義test_collection方法,例如如下圖:
從新啓動nova-api服務加入的代碼生效。(每次改動api模塊代碼則必須從新啓動服務,後面將再也不反覆)

再次請求url:
curl -i 'http://192.168.1.158:8774/v2/b077619bde964a4eb924db869fba977d/os-networks/test_collection' -X POST -H "X-Auth-Project-Id: admin" -H "User-Agent: python-novaclient" -H "Accept: application/json" -H "X-Auth-Token:$token"
api日誌:

在test_collection函數中,加入本身定義的底層代碼就能夠。

到此加入底層api完畢。
相關文章
相關標籤/搜索