neutron client源码分析
2016-12-25 13:28
549 查看
1.首先什么是neutronclient
neutronclient就是我们的命令行客户端代码
![](https://img-blog.csdn.net/20161225133307612?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGtqYXNkMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
上图是所有的neutron的可执行python脚本,neutron就是今天我们要分析的neutron-client,我们可以从脚本中看出
![](https://img-blog.csdn.net/20161225133315565?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGtqYXNkMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2. 分析neutronclient源码
2.1首先我们分析一下源码的目录结构
![](https://img-blog.csdn.net/20161225133322811?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGtqYXNkMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.2 代码流程
(1).首先从shell.py的main函数进入生成NeutronShell类,然后启动Neutronshell的run函数,因为我们是在命令行中使用neutron说叫NeutronShell
(2).NeutronShell中的run函数会调用run_subcommand函数,执行某一条命令
(3).run_subcommand函数通过解析命令调用run_command函数运行命令
(4).然后会到某一条命令下运行run,这里我们举例运行DisassociateFloatingIP命令的run函数
(5).run函数中主要是调用要生成neutronclient我们看一下过程截图
(5.1).
![](https://img-blog.csdn.net/20161225133330425?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGtqYXNkMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(5.2).调用基类NeutronCommand中的get_client函数
![](https://img-blog.csdn.net/20161225133336717?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGtqYXNkMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(5.3).client_manager是在shell.py的authenticate_user函数中被赋予,主要是clientmanager类
![](https://img-blog.csdn.net/20161225133342592?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGtqYXNkMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(5.4).clientmanager主要是在common模块中,从(5.2)的get_client函数中可以看出主要是返回client_manager的neutron参数作为neutronclient
![](https://img-blog.csdn.net/20161225133348847?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGtqYXNkMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
可以看出主要是一个clientcache对象
参数make_client见下面
(5.5)make_client主要是在neutronclient下neutron的client.py文件下
![](https://img-blog.csdn.net/20161225133359373?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGtqYXNkMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
通过get_client_class函数和上面的API_VERSIONS可以看出主要生成的客户端是
在'neutronclient.v2_0.client.Client 这个模块下
![](https://img-blog.csdn.net/20161225133405077?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGtqYXNkMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(5.6).这个client在他的基类clienbase中需要有底层基于通信的client
![](https://img-blog.csdn.net/20161225133410420?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGtqYXNkMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这个httpclient就是neutronclient下面client.py文件下的
总结从上面可以看出client端的生成是从代码目录中由里向外调的
![](https://img-blog.csdn.net/20161225133415488?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGtqYXNkMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3.再介绍一下Command类
这里使用了Cliff框架,所有的命令类都继承自command.command,它的子类是OpenstackCommand,OpenstackCommand的子类是NeutronCommand,然后主要把Neutorn中的命令分为create,update,delete,list和show5种,所以在NeutronCommand命令有5个子类,然后对于每一种网络资源,比如network可就是继承上面的5个类生产network的5个资源
neutronclient就是我们的命令行客户端代码
上图是所有的neutron的可执行python脚本,neutron就是今天我们要分析的neutron-client,我们可以从脚本中看出
2. 分析neutronclient源码
2.1首先我们分析一下源码的目录结构
2.2 代码流程
(1).首先从shell.py的main函数进入生成NeutronShell类,然后启动Neutronshell的run函数,因为我们是在命令行中使用neutron说叫NeutronShell
(2).NeutronShell中的run函数会调用run_subcommand函数,执行某一条命令
(3).run_subcommand函数通过解析命令调用run_command函数运行命令
(4).然后会到某一条命令下运行run,这里我们举例运行DisassociateFloatingIP命令的run函数
(5).run函数中主要是调用要生成neutronclient我们看一下过程截图
(5.1).
(5.2).调用基类NeutronCommand中的get_client函数
(5.3).client_manager是在shell.py的authenticate_user函数中被赋予,主要是clientmanager类
(5.4).clientmanager主要是在common模块中,从(5.2)的get_client函数中可以看出主要是返回client_manager的neutron参数作为neutronclient
可以看出主要是一个clientcache对象
参数make_client见下面
(5.5)make_client主要是在neutronclient下neutron的client.py文件下
通过get_client_class函数和上面的API_VERSIONS可以看出主要生成的客户端是
在'neutronclient.v2_0.client.Client 这个模块下
(5.6).这个client在他的基类clienbase中需要有底层基于通信的client
这个httpclient就是neutronclient下面client.py文件下的
总结从上面可以看出client端的生成是从代码目录中由里向外调的
3.再介绍一下Command类
这里使用了Cliff框架,所有的命令类都继承自command.command,它的子类是OpenstackCommand,OpenstackCommand的子类是NeutronCommand,然后主要把Neutorn中的命令分为create,update,delete,list和show5种,所以在NeutronCommand命令有5个子类,然后对于每一种网络资源,比如network可就是继承上面的5个类生产network的5个资源
相关文章推荐
- Asp.net MVC源码分析--Model Validation(Client端)实现(2)
- 分布式文件系统KFS源码阅读与分析(四):RPC实现机制(KfsClient端)
- SSO单点登录系列1:cas客户端源码分析cas-client-java-2.1.1.jar
- Storm-源码分析-Topology Submit-Client
- HDFS dfsclient写文件过程 源码分析
- AndroidPN源码分析(包括client和server)
- client读写hdfs的源码分析总结
- HDFS dfsclient写文件过程 源码分析
- HBaseClient源码分析
- Storm-源码分析-Topology Submit-Client
- asp.net mvc源码分析-BeginForm方法 和ClientValidationEnabled 属性
- mosquitto-0.15-client-pub_client.c源码分析
- Hadoop源码分析HDFS ClientProtocol——create
- Asp.net MVC源码分析--Model Validation(Client端)实现(1)
- Hadoop RPC源码分析之Client
- 分布式文件系统KFS源码阅读与分析(四):RPC实现机制(KfsClient端)
- Hadoop源码分析HDFS Client向HDFS写入数据的过程解析
- AndroidPN源码分析(包含client和server)
- HBase源码分析之org.apache.hadoop.hbase.client.coprocessor包
- HDFS dfsclient读文件过程 源码分析