以下已创建虚拟机为题目对openstack进行通透性代码分析,写得简陋望各位手下留情
1.发起ec2命令(nova/api/ec2/__init__.py)
2.执行方法__call__解析URL发送参数
3.执行/nova/api/ec2/apirequest.py:apirequest.invoke,这里有一个ec2动作解析,如RunInstances->run_instances;变成小写各独立单词加下划线
4.转向/nova/api/ec2/cloud.py:CloudController.run_instances,在此方法内执行真正创建动作
5./nova/compute/api.py:Api.create,调用rpc.cast,发送数据到目标物理服务器nova-compute
6.目标服务器接收到数据(/nova/rpc/impl_kombu.py),解析数据,并且执行数据里所带的方法run_instance
7.真正的run_instance在manager.py执行,所有动作功能都在这里被管理,在这里会指向到底是libvirt,db,还是其他来完成工作
8.这里的虚拟机启动是libvirt完成完成,进入文件nova/virt/libvirt/connection.py,执行对应的代码
9.随后代码自然很容易顺利进行
-----------------------------------------
后续补充
在api内进行rpc调用时需要注意,如果需要获取返回值调用rpc.call,如果不需要返回值则调用rpc.cast
/usr/lib/python2.6/site-packages/nova/api/ec2/__init__.py
/usr/lib/python2.6/site-packages/nova/api/ec2/cloud.py
/usr/lib/python2.6/site-packages/nova/compute/api.py
/usr/lib/python2.6/site-packages/nova/compute/manager.py
/usr/lib/python2.6/site-packages/nova/virt/libvirt/connection.py
扩展创建虚拟磁盘
http://192.168.1.xx:8773/services/Cloud/?AWSAccessKeyId=test%3Atest&Action=CreateVdisk&hostname=novaxx&vdisknum=1&vdisksize=2G&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-07-04T01%3A29%3A53&Version=2009-11-30&Signature=M6381JzVGn6aOSgS70MTmtBdsYceu07cI9WTkv7rw5k%3D