Nova创建虚拟机的底层代码分析

本文是个人学习OpenStack Nova虚拟机创建的笔记,主要探讨nova/virt/libvirt/driver.py中利用libvirt进行虚拟机创建的底层代码细节。
摘要由CSDN通过智能技术生成

作为个人学习笔记分享,有任何问题欢迎交流!

在openstack中创建虚拟机的底层实现是nova使用了libvirt,代码在nova/virt/libvirt/driver.py。

#image_meta:镜像的相关内容,#injected_files:要注入到VM的文件
#network_info:网络相关信息,block_device_info:磁盘相关信息
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,
                                            block_device_info,
                                            image_meta)
		#创建VM的磁盘文件
        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)
		#综合各方面的信息,拼装一个define VM的XML文件
        xml = self.to_xml(context, instance, network_info,
                          disk_info, image_meta,
                          block_device_info=block_device_info,
                          write_to_disk=True)
		#向neutron请求IP,然后使用xml创建domain
        self._create_domain_and_network(context, xml, instance, network_info,
                                        block_device_info)
下面将详细分析上述4个函数,比源代码略有删减

#virt_type: cpu_mode,一般为kvm,具体可参见该选项的注释
def get_disk_info(virt_type, instance, block_device_info=None,
                  image_meta=None, rescue=False):
	#根据device_type和virt_type返回总线类型,如kvm和disk,则会返回virtio
	#cdrom和kvm,则会返回ide
    disk_bus = get_disk_bus_for_device_type(virt_type, image_meta, "disk")
cdrom_bus = get_disk_bus_for_device_type(virt_type, image_meta, "cdrom")
#确定怎样映射默认的disks到VM中,如root挂到/dev/vda等,还有swap, local等
    mapping = get_disk_mapping(virt_type, instance,
                               
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值