接受到rpc请求后,根据虚拟机的uuid锁住整个虚拟机操作,生成一个绿色线程去调用创建虚拟机的方法_do_build_and_run_instance
_do_build_and_run_instance
- 更新虚拟机的状态为vm_states.BUILDING,任务的状态为task_states.SCHEDULING
- 解码base64编码的注入文件
- 调用_build_and_run_instance方法
- 异常处理,创建失败后会重新调用conductor的方法重创虚拟机
_build_and_run_instance
- 发送虚拟机开始创建的消息到消息队列
- 资源预占(待补充)
- 分组操作处理(affinity /待补充/)
- 创建网络及其磁盘操作(_build_resources)
- 调用_build_networks_for_instance创建网络
- 调用_default_block_device_names验证相关的磁盘信息
- 调用更底层的虚拟化层创建虚拟机(这里使用的libvirt+kvm方式)