1. 程式人生 > >openstack-wsgi的route中添加api流程具體解釋(os-networks)添加

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

微軟 bug aec cin vacl span 進行 服務 ber

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

如有轉載,請保留源作者博客信息。


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

如需交流,歡迎大家博客留言。

在前面文章中,已經具體介紹了。怎樣從頁面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具體公布流程)


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

重新啟動openstack-nova-api服務

service openstack-nova-api restart tailf /var/log/nova/api.log
技術分享 以上打印的route信息,就是底層通過wsgi,將api以加入到route的mapper。公布給外邊調用。
2、接下來解說怎樣加入自己定義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字段屬性。

collection_actions公布的api是針對對象集合,比如獲取全部person的信息。
跟多關於route信息請參考文章:wsgi-restful-routes具體解釋
3、解說:公布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請求時候:則相應找到上述路由。

技術分享
4、請求自己定義的路由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完畢。


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