您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關openstack-wsgi的route中怎樣增加api,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
今天要講解的是當我們以后生成了這樣一個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有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。