博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
openstack核心路由和扩展路由及路由对应的api函数调用流程分析
阅读量:6619 次
发布时间:2019-06-25

本文共 1763 字,大约阅读时间需要 5 分钟。

hot3.png

感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!

如有转载,请保留源作者博客信息。

tantexian

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

本文中要讲解的重点是:从novaclient层拼接url发送,如何映射找到底层route,以及根据底层的route入口,又如何找到要执行代码api入口:
1、首先从novaclient层开始(创建实例为例):
vim /usr/lib/python2.6/site-packages/novaclient/v1_1/servers.py
跟踪_boot方法:
继续往下跟踪_create()方法:
根据代码:
_resp, body = self.api.client.post(url, body=body)
可以知道创建实例的url为:/server 其中body为传给下层的参数,例如虚拟机内存大小,数量等。
其中发送url的方式为POST。接下来第二步就是在已发布的route中找到对应此post的url的路由映射。
2、将nova层的route全部打印出来:
 vim /usr/lib/python2.6/site-packages/nova/api/openstack/__init__.py
找到对应的url为server的routes:
由之前文章对wsgi的route映射关系分析可以,对应代码为该controller的create()方法:详情请自行参考文章:
至此则到达了nova模块的底层create()api调用。
3、鉴于openstack发布路由的有多个种类:核心路由发布,扩展路由发布,接下来对此进行补充详解:
首先对上述步骤中的routes与controller的关系进行一个总结:
第一步假若找到了对应的路由例如:
那么接下来该如何找到该路由的发布文件代码呢?
在openstack框架中发布route的代码有两种:
第一种核心路由发布:(
其中Eclipse截图的上边框显示了对应的文件路径
核心路由发布,则自动对应了给路由的CURD(增删查改)核心操作,即create、delete、index、show,update。(这些由route框架自动生成对应)
注:以本处的servers发布为例:create、delete、index、show,update这五个方法有routes框架自动生成映射关系。detail方法则是自定义方法。因此
假若需要自定义方法时,可参考本处的detail方法进行添加。
第二种扩展路由发布:
其中如何在此添加自定义路由请参考文章:
4、当novaclient发送的url找到对应的route,接下来route会根据url的字段,以及url发送方式(eg:POST、GET、PUT等),在对应的
controller找到对应的方法执行:
以创建虚拟机路由举例说明:
POST     /{project_id}/servers
根据下图对应关系,此处应该调用controller里面的create()方法。
假若路由是:  GET     /{project_id}/servers/1/my_edit
则会调用controller里面的my_edit()方法。
5、接下来的问题就是根据route如何找到对应的controller类:
第一种核心路由发布的controller类对应位置:
寻找对应的controller=self.resources['servers'],的controller类:
第二种扩展路由发布的controller类对应位置:
其他/usr/lib/python2.6/site-packages/nova/api/openstack/compute/contrib/目录下的扩展路由controller就在自身文件夹。
以os-networks为例:
寻找对应的NetworkController()类:
只要确定了controller位置,即可以知道route映射过来的url将会调用controller类里面的哪一个函数。到此路由对应的api函数调用流程分析结束。

转载于:https://my.oschina.net/tantexian/blog/625906

你可能感兴趣的文章
vmware workstation14永久激活密钥分享
查看>>
使用JdbcTemplate和JdbcDaoSupport
查看>>
Mysql学习第三课-分析二进制日志进行增量备份和还原
查看>>
如何检测域名是否被微信屏蔽 微信域名检测接口API是如何实现
查看>>
POJ1611-The Suspects
查看>>
功能测试
查看>>
嵌入式 详解udev
查看>>
中国电信集采终端6700万部 金额达1070亿元
查看>>
2016年的十个数据中心故事
查看>>
springboot docker笔记
查看>>
服务化改造实践 | 如何在 Dubbo 中支持 REST
查看>>
【第8章】JVM内存管理
查看>>
ovirt官方安装文档 附录G
查看>>
磁盘故障小案例
查看>>
HTML
查看>>
POJ 3335 Rotating Scoreboard 半平面交
查看>>
域名和网址链接被微信浏览器拦截怎么办 微信屏蔽网址打开如何解决
查看>>
ubuntu下安装jdk
查看>>
python操作数据库-安装
查看>>
kuangbin专题七 POJ3264 Balanced Lineup (线段树最大最小)
查看>>