1.查看\nova\api\openstack\compute\routes.py路由文件,可知下一步调用servers.py中的create函数。
2.\nova\api\openstack\compute\servers.py中的create( )函数解析req,body数据后调用computer的api的create( )函数。
3.\nova\compute\api.py的create( )函数,检查ip,端口,主机聚合等,进而调用self._create_instance( )函数。
create() 函数调用同文件下的self._create_instance()函数。
4.\nova\compute\api.py的_create_instance()函数,验证输入参数,调度。
_create_instance()调用self.compute_task_api.schedule_and_build_instance()转到conductor的api接口。
5./nova/conductor/api.py的schedule_and_build_instance函数调用conductor的rpc服务 self.conductor_compute_rpcapi.schedule_and_build_instances( ),远程调用过程
/nova/conductor/rpcapi.py的schedule_and_build_instances( )。
6.conductor的rpc服务异步调用自己manager文件的def schedule_and_build_instances( )函数
/nova/conductor/manager.py 的 schedule_and_build_instances( )函数
schedule_and_build_instances( )给虚机添加uuid,进而开始调度manager中的host_lists = self._schedule_instances( )获得主机可用列表
nova/conductor/manager.py 的 _schedule_instances( )开始查询可用主机host_lists = self.query_client.select_destinations( )
nova/scheduler/client/query.py 中的 query_client.select_destinations( )返回最合适的目标
query.py文件的select_destinations( )转到scheduler 的rpc服务self.scheduler_rpcapi.select_destinations( )
/nova/scheduler/rpcapi.py 的 select_destinations( )
scheduler 的rpc服务select_destinations()异步调用scheduler的manager中的cctxt.call(ctxt, 'select_destinations', **msg_args)
nova/scheduler/manager.py 的 select_destinations( )返回最适合RequestSpec的目标
其中,调用底层的driver.select_destinations( )
7.返回到nova/conductor/manager.py的 schedule_and_build_instances( )函数,循环调用compute的rpc服务调用build_and_run_instance,异步构建实例
8.到compute的manager的def build_and_run_instance()
nova/compute/manager.py 的 build_and_run_instance( )
build_and_run_instance调用utils.spawn_n(_locked_do_build_and_run_instance,
context, instance, image, request_spec,
filter_properties, admin_password, injected_files,
requested_networks, security_groups,
block_device_mapping, node, limits, host_list)
9.utils.spawn_n( )调用_do_build_and_run_instance( )
nova/compute/manager.py 的 _do_build_and_run_instance( )
10. _do_build_and_run_instance( )调用_build_and_run_instance( )
nova/compute/manager.py 的 _build_and_run_instance( )
11._build_and_run_instance( )调用_build_resources( )准备资源,调用self.driver.spawn创建虚机
spawn调用libvirt等底层命令创建虚机。