此处以OpenStack mitaka版本为例,实际最新的Ocata版本也差不多,以创建一个虚拟机为例来分析nova源码中执行流程,该流程有助于二次开发,阅读源码前最好先熟悉一下pastedeploy、webob、stevedore等openstack中的核心库,以及rpc消息通信机制。
安装完OpenStack后,所有的源码在/usr/lib//usr/lib/python2.7/site-packages/目录下,nova服务器端源码在nova目录中,客户端源码在novaclient目录中,动态加载nova插件的映射文件在nova-XXXX-info目录中的entry_points.txt文件中。
客户端:
novaclient在初始化的过程会把/nova/v2/下所有的xxxxManager类加载进来,并通过_construct_http_client()构造一个HTTPClient对象,用来发送url请求,每个xxxxManger类都直接或间接继承了base.ManagerWithFind类,xxxxManager类中的方法主要用来构造url格式、请求参数、请求方法。客户端创建虚拟机的请求对应在/novaclient/v2/servers.py中的_boot()方法,该方法调用了基类Manager中的_create()方法。
服务器端:
nova在接收到客户端的请求后,会通过pastedeploy加载/etc/nova/api-paste.ini配置文件来完成url的映射、认证、请求等,配置文件中包含了四类部件app(应用程序)、filter(过滤器)、pipeline(管道)、composite(复合体)。
[composite:openstack_compute_api_v21]
use =