原文文章:http://blog.csdn.net/xiangpingli/article/details/47912041
openstack版本为K版本。
从镜像启动虚拟机之:创建镜像+创建虚拟机并开机的流程
- nova.api.openstack.compute.servers.Controller.create
- ->nova.compute.api.API.create
- ->nova.compute.api.API._create_instance
- ->nova.comductor.ComputeTaskAPI.build_instances
- ->nova.conductor. rpcapi.ComputeTaskAPI.build_instances
- ->nova.conductor. manager.ComputeTaskAPI.build_instances
- ->nova.compute.rpcapi.ComputeAPI.build_and_run_instance
- ->nova.compute.manager.ComputeAPI.build_and_run_instance
- ->nova.compute.manager.ComputeAPI._locked_do_build_and_run_instance
- ->nova.compute.manager.ComputeAPI._do_build_and_run_instance
- ->nova.compute.manager.ComputeAPI._build_and_run_instance
- ->nova.virt.libvirt.driver.LibvirtDriver.spawn
- ->Nova.virt.libvirt.driver._create_image //创建系统盘
- ->Nova.virt.libvirt.driver._try_fetch_image_cache
- ->Nova.virt.libvirt.imagebackend.Image.cache
- ->Nova.virt.libvirt.imagebackend.Qcow2.create_image
- ->Nova.virt.libvirt.imagebackend.Qcow2.create_image:prepare_template即fetch_image
- ->Nova.virt.libvirt.utils.fetch_image
- ->Nova.virt.images.fetch_to_raw
- ->Nova.virt.images.fetch #下载系统镜像到/var/lib/nova/instances/_base/目录
- ->nova.image.glance.GlanceImageService.download
- ->nova.image.glance.GlanceClientWrapper.call
- ->Nova.virt.images.convert_image #若镜像不是raw格式,且nova.conf中force_raw_images=True,则将backing file强制转换为raw格式
- ->Nova.virt.libvirt.imagebackend.Qcow2.create_image:copy_qcow2_image
- ->nova.virt.libvirt.utils.create_cow_image
- ->nova.virt.libvirt.driver._get_guest_xml //创建虚拟机的xml文件
- ->nova.virt.libvirt.driver._create_domain_and_network //创建主机和主机网络
- ->nova.virt.driver.block_device_info_get_mapping //块设备映射
- ->nova.virt.driver.get_image_from_system_metadata //获取镜像和元数据
- ->nova.virt.libvirt.driver.LibvirtDriver.attach_volume //挂载云硬盘
- ->nova.virt.libvirt.firewall.prepare_instance_filter //准备网络
- ->nova.virt.libvirt.driver.LibvirtDriver._create_domain //创建主机
- ->nova.virt.libvirt.driver.LibvirtDriver._create_domain :domain = self._conn.defineXML
- ->/usr/lib64/python2.7/site-packages/libvirt.py:defineXML
- ->nova.virt.libvirt.firewall.apply_instance_filter//使用网络,实际上全在prepare_instance_filter中做了,这里都是空
- ->nova.virt.libvirt.driver.power_on //开机