溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

openstack-wsgi的route中怎樣增加api

發(fā)布時(shí)間:2021-12-01 17:44:00 來源:億速云 閱讀:158 作者:柒染 欄目:云計(jì)算

今天就跟大家聊聊有關(guān)openstack-wsgi的route中怎樣增加api,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

今天要講解的是當(dāng)我們以后生成了這樣一個(gè)url了,下一步wsgi框架又是如何根據(jù)url去調(diào)用nova底層相應(yīng)的代碼。

講解這個(gè)之前,先回憶下查看routes已發(fā)布的api。更多詳情請(qǐng)查看文章: openstack_ice之wsgi詳解(paste從ini配置文件->routesr具體發(fā)布流程)


1、首先將route mapper信息打印出來:

vim /usr/lib/python2.6/site-packages/nova/api/openstack/__init__.py    

openstack-wsgi的route中怎樣增加api

重啟openstack-nova-api服務(wù)

service  openstack-nova-api restart    

tailf /var/log/nova/api.log    

openstack-wsgi的route中怎樣增加api

以上打印的route信息,就是底層通過wsgi,將api以添加到route的mapper,發(fā)布給外邊調(diào)用。


2、接下來講解如何添加自定義api,并加入到route mapper中,發(fā)布出來給外部調(diào)用.

注:接下來以網(wǎng)絡(luò)模塊為例,增加一個(gè)test_api接口。

下圖為未添加前,network的route信息:

openstack-wsgi的route中怎樣增加api


通過之前的文章分析,找到wsgi的入口:

vim /usr/lib/python2.6/site-packages/nova/api/openstack/compute/contrib/os_networks.py


openstack-wsgi的route中怎樣增加api

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


openstack-wsgi的route中怎樣增加api

中添加下圖代碼:test_member:post、test_collection:

openstack-wsgi的route中怎樣增加api

每次添加完成需要重新發(fā)布需要重啟openstack-nova-api服務(wù)。

重啟后查看os-network路由信息如下圖:

openstack-wsgi的route中怎樣增加api


openstack-wsgi的route中怎樣增加api

如上圖發(fā)現(xiàn)test_member、test_collection路由信息發(fā)布成功。

member_actions發(fā)布的api是針對(duì)每個(gè)特定的對(duì)象,例如獲取id為1的person全部信息。因此需要在url前面增加id字段屬性。

collection_actions發(fā)布的api是針對(duì)對(duì)象集合,例如獲取所有person的信息。


跟多關(guān)于route信息請(qǐng)參考文章: wsgi-restful-routes詳解


3、講解:發(fā)布api成功,后臺(tái)的route控制器接收到匹配的url之后,如何控制調(diào)用后臺(tái)代碼

url的產(chǎn)生大致有三種方式:

1:用dashboard通過novaclient組裝。(網(wǎng)絡(luò)的由neutronclient組裝,簡(jiǎn)單起見,后續(xù)文章默認(rèn)只提及novaclient)

2:通過系統(tǒng)命令例如nova list產(chǎn)生。

3:通過curl自己組裝。


第一和第二種方式,請(qǐng)參考之前對(duì)應(yīng)文章詳解。接下來詳細(xì)介紹下如果通過curl調(diào)用已發(fā)布的route,開發(fā)自定義api。

注:底層api開發(fā),多采用第三種方式進(jìn)行。


第一步獲取token:

執(zhí)行nova --debug list:

openstack-wsgi的route中怎樣增加api

其中X-Auth-Token后面的值為需要獲取的token。

第二步:

將token值添加到環(huán)境變量中(也可以不加入環(huán)境變量,每次請(qǐng)求時(shí)帶上)

vim  vim .bashrc

openstack-wsgi的route中怎樣增加api


這樣以后就可以直接使用$token獲取token的值。

export .bashrc文件

echo $token將看到token值


第三步:發(fā)送url請(qǐng)求:

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"


對(duì)應(yīng)的route為:

openstack-wsgi的route中怎樣增加api


當(dāng)執(zhí)行上述url請(qǐng)求時(shí)候:則對(duì)應(yīng)找到上述路由。

openstack-wsgi的route中怎樣增加api


4、請(qǐng)求自定義的路由test_collection:

openstack-wsgi的route中怎樣增加api

根據(jù)路由信息,拼接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"    

錯(cuò)誤為404沒有找到:
openstack-wsgi的route中怎樣增加api


打開route發(fā)布源碼:

vim /usr/lib/python2.6/site-packages/nova/api/openstack/compute/contrib/os_networks.py

openstack-wsgi的route中怎樣增加api


進(jìn)入到路由控制器:NetworkController():

openstack-wsgi的route中怎樣增加api

可以看到路由控制器類有方法show(),delete()等。

在控制器類定義test_collection方法,如下圖:

openstack-wsgi的route中怎樣增加api

重啟nova-api服務(wù)添加的代碼生效。(每次修改api模塊代碼則必須重啟服務(wù),后面將不再重復(fù))


再次請(qǐng)求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"    

openstack-wsgi的route中怎樣增加api

api日志:
openstack-wsgi的route中怎樣增加api

在test_collection函數(shù)中,添加自定義的底層代碼即可。

到此添加底層api完成。

看完上述內(nèi)容,你們對(duì)openstack-wsgi的route中怎樣增加api有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI