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完毕。
相关文章
相关标签/搜索