温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》
  • 首页 > 
  • 教程 > 
  • 服务器 > 
  • 云计算 > 
  • 如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析

发布时间:2021-12-01 15:53:59 来源:亿速云 阅读:189 作者:柒染 栏目:云计算

本篇文章为大家展示了如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析 ,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

文中要讲解的重点是:从novaclient层拼接url发送,如何映射找到底层route,以及根据底层的route入口,又如何找到要执行代码api入口:


1、首先从novaclient层开始(创建实例为例):

vim /usr/lib/python2.6/site-packages/novaclient/v1_1/servers.py

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析

跟踪_boot方法:

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析

继续往下跟踪_create()方法:

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析


根据代码:

_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

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析

找到对应的url为server的routes:  

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析  


 

由之前文章对wsgi的route映射关系分析可以,对应代码为该controller的create()方法:详情请自行参考文章:   wsgi-restful-routes详解  

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析  

至此则到达了nova模块的底层create()api调用。  


 


 

3、鉴于openstack发布路由的有多个种类:核心路由发布,扩展路由发布,接下来对此进行补充详解:

首先对上述步骤中的routes与controller的关系进行一个总结:

第一步假若找到了对应的路由例如:

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析  

那么接下来该如何找到该路由的发布文件代码呢?

在openstack框架中发布route的代码有两种:

第一种核心路由发布:(   其中Eclipse截图的上边框显示了对应的文件路径)

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析  

核心路由发布,则自动对应了给路由的CURD(增删查改)核心操作,即create、delete、index、show,update。(这些由route框架自动生成对应)

注:以本处的servers发布为例:create、delete、index、show,update这五个方法有routes框架自动生成映射关系。detail方法则是自定义方法。因此

假若需要自定义方法时,可参考本处的detail方法进行添加。


 

第二种扩展路由发布:

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析  

其中如何在此添加自定义路由请参考文章:   openstack-wsgi的route中增加api流程详解(os-networks)增加  


 


 

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()方法。  

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析  


 

5、接下来的问题就是根据route如何找到对应的controller类:

第一种核心路由发布的controller类对应位置:

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析  

寻找对应的controller=self.resources['servers'],的controller类:

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析  


 


 

第二种扩展路由发布的controller类对应位置:

其他/usr/lib/python2.6/site-packages/nova/api/openstack/compute/contrib/目录下的扩展路由controller就在自身文件夹。

以os-networks为例:

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析  

寻找对应的NetworkController()类:

如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析  


 


 


 

只要确定了controller位置,即可以知道route映射过来的url将会调用controller类里面的哪一个函数。到此路由对应的api函数调用流程分析结束。

上述内容就是如何进行openstack核心路由和扩展路由及路由对应的api函数调用流程的分析 ,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI