设为首页 收藏本站
查看: 1166|回复: 0

[经验分享] openstack-wsgi的route中添加api流程具体解释(os-networks)添加

[复制链接]

尚未签到

发表于 2017-6-27 14:19:20 | 显示全部楼层 |阅读模式
  感谢朋友支持本博客。欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免。欢迎指正!
  如有转载,请保留源作者博客信息。
  

BetterMe的博客: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
DSC0000.jpg
  重新启动openstack-nova-api服务

service  openstack-nova-api restart
tailf /var/log/nova/api.log
DSC0001.jpg
以上打印的route信息,就是底层通过wsgi,将api以加入到route的mapper。公布给外边调用。


2、接下来解说怎样加入自己定义api,并加入到route mapper中,公布出来给外部调用.
注:接下来以网络模块为例,添加一个test_api接口。
下图为未加入前,network的route信息:
DSC0002.jpg


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

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



DSC0003.jpg
os_network为openstack封装的,用来添加映射route mapper路由的类:



DSC0004.jpg
中加入下图代码:test_member:post、test_collection:
DSC0005.jpg
每次加入完毕须要又一次公布须要重新启动openstack-nova-api服务。
重新启动后查看os-network路由信息例如以下图:
DSC0006.jpg


DSC0007.jpg
如上图发现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:
DSC0008.jpg
当中X-Auth-Token后面的值为须要获取的token。
第二步:
将token值加入到环境变量中(也能够不加入环境变量,每次请求时带上)
vim  vim .bashrc
DSC0009.jpg


这样以后就能够直接使用$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为:
DSC00010.jpg


当运行上述url请求时候:则相应找到上述路由。
DSC00011.jpg


4、请求自己定义的路由test_collection:
DSC00012.jpg
依据路由信息,拼接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没有找到:
DSC00013.jpg


打开route公布源代码:

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

DSC00014.jpg


进入到路由控制器:NetworkController():
DSC00015.jpg
能够看到路由控制器类有方法show(),delete()等。
在控制器类定义test_collection方法,例如以下图:
DSC00016.jpg
重新启动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"
DSC00017.jpg
api日志:
DSC00018.jpg


在test_collection函数中,加入自己定义的底层代码就可以。
到此加入底层api完毕。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-388710-1-1.html 上篇帖子: openstack controller ha测试环境搭建记录(一)——操作系统准备 下篇帖子: instance 怎么获得自己的 Metadata
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表