看了一下OpenStack+Libvirt+KVM的配置下, 创建虚拟机的过程中Image创建过程。
1. 找到 虚拟机的创建函数:/opt/stack/nova/nova/virt/libvirt/driver.py中的:
def spawn(self, context, instance, image_meta, injected_files, admin_password, network_info=None, block_device_info=None): disk_info = blockinfo.get_disk_info(CONF.libvirt.virt_type, instance, image_meta, block_device_info)
2. 在spawn函数中,可以看到第一步就是创建 iamge的函数调用:
self._create_image(context, instance, disk_info['mapping'], network_info=network_info, block_device_info=block_device_info, files=injected_files, admin_pass=admin_password)
3. 在这个函数中就是VM的image的创建过程了。其中有个比较重要的处理就是对于desk的处理:
self._try_fetch_image_cache(backend, fetch_func, context, root_fname, disk_images['image_id'], instance, size, fallback_from_host)
4。其实这个函数依然是 调用的image.cache, 而image对象是 /opt/stack/nova/nova/virt/image.py 中的fetchXXX方法。这个方法最终到达glance的download,从而将image从glance下载到compute host本地。当然这个过程中还有几次的转换,从image--》imagecache--》download中的api。先写到这里,稍后补充。 |