OpenStack之Nova分析——创建虚拟机(八)

上篇文章分析了虚拟机磁盘镜像文件的创建过程,接下来要进行的工作便是定义虚拟机定义XML文件以及虚拟机网络创建和虚拟机创建。关于虚拟机定义XML文件就是对虚拟机的一些描述,其创建过程就不再展开了。我们直接来继续分析虚拟机创建的最后环节——虚拟机和虚拟网络的创建。

虚拟机和虚拟网络的创建定义在_create_domain_and_network方法中,来看这个方法

class LibvirtDriver(driver.ComputeDriver):
    def _create_domain_and_network(self, xml, instance,
                                   network_info, block_device_info=None):
        ...
        #创建虚拟机OpenVSwitch断点
        self.plug_vfs(instance, network_info)
        ...
        #创建虚拟机
        domain = self._create_domain(xml, instance=instance)
        return domain
_create_domain_and_network方法主要做了2件事

1. 调用plug_vifs方法创建虚拟机的OpenVSwitch端点

2. 调用_create_domain方法创建虚拟机

这里只分析_create_domain方法,其定义如下

class LibvirtDriver(driver.ComputeDriver):
    def _create_domain(self, xml=None, domain=None, 
                       instance=None, launch_flags=0):
        #获取虚拟机镜像文件的存储路径
        if instance:
            inst_path = libvirt_utils.get_instance_path(instance)
        ...
        #定义虚拟机
        if xml:
            domain = self._conn.defineXML(xml)
        #创建虚拟机
        domain.createWithFlags(launch_flags)
        ...
        return domain
_create_domain方法首先调用_conn成员变量的defineXML方法定义一个虚拟机,相当于执行了virsh define命令。这里的_conn是一个virConnect对象。virConnect类是libvirt包中定义的一个标准类,它创建并维护了一个与libvirtd服务的连接,它的defineXML方法会返回新定义虚拟机的virDomain对象。virDomain类也是libvirt包中定义的一个标准类。然后调用virDomain对象的createWithFlags启动新定义的虚拟机。相当于执行了virsh start命令。

前面几篇文章已经通过大量的篇幅分析了虚拟机的创建过程,在整个的创建过程中,我们相继分析了涉及到的Nova API、Nova Scheduler、Nova Compute服务,而实际上在虚拟机创建的流程中还包括虚拟网络的创建过程,这里并没有介绍,后面有机会再花时间写这方面的文章吧。

最后,这篇通过一个简单的流程图,再次对虚拟机的创建过程做一个总结,作为我们分析虚拟机创建过程的一个收尾:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值