通过WebService增加对VirtualBox的支持

https://blueprints.launchpad.net/ironic/+spec/ironic-virtualbox-webservice-support

此更改建议通过VirtualBox WebService为测试目的添加 PowerInterfaceManagementInterface

问题描述

一些开发者在他们的开发机器上使用Windows作为操作系统。这些开发者可能会使用在VirtualBox中运行的Linux虚拟机作为他们的云控制器。他们无法在与同一VirtualBox Windows宿主机(具有硬件辅助虚拟化)上的虚拟机中使用虚拟机对Ironic进行测试,就像使用裸机节点一样。开发者可以选择在他们的VirtualBox虚拟机内部运行kvm/qemu,但嵌套虚拟化非常慢(因为没有硬件辅助)。

目前,Ironic支持将VirtualBox虚拟机作为裸机目标并对其进行配置。它通过SSH连接到VirtualBox宿主机并使用VBoxManage运行命令来实现。如果将VirtualBox安装在Linux机器上,这可以很好地工作。但是,当VirtualBox安装在Windows机器上时,由于以下原因,配置并使SSH与VBoxManage一起工作是困难的(如果不是不可能的):

  • Windows没有内置的SSH支持,需要使用一些第三方软件才能在Windows上启用SSH支持。

  • 即使配置了SSH,由于Windows管理用户帐户的方式,VBoxManage也无法远程工作——Windows的本机用户帐户与相应的SSH用户帐户不同,并且使用SSH用户帐户运行VBoxManage时无法正常工作。

  • 即使调整了VirtualBox应用程序的策略,远程VBoxManage和VBoxSvc也无法正确同步,并且经常导致崩溃。

提议的变更

  • VirtualBox配备了一个非常友好的WebService,可以远程管理虚拟机。这通过使用SOAP与在VirtualBox宿主机上运行的WebService进行通信来实现。

  • 将编写一个新的Python库,名为 pyremotevbox,它将单独在GitHub和PyPI上可用。目前它托管在 GitHub 上。

  • 编写一个新的 PowerInterfaceManagementInterface 实现,命名为 VirtualBoxPowerVirtualBoxManagement,它使用新的Python库来管理VirtualBox虚拟机。

  • 创建新的驱动程序 pxe_vboxagent_vbox 用于在Virtualbox虚拟机上部署。 另外创建一个 fake_vbox 驱动程序,用于使用假部署进行测试。

  • 这也可以被运行VirtualBox的其他操作系统(Windows除外)的用户使用。他们也可以在VirtualBox在Linux机器上运行时使用SSHPower和SSHManagement。与ssh模块相比,此模块的优势在于它会更快(因为ssh模块首先ssh到系统,然后运行VBoxManage命令,而VBoxManage执行相同的操作,因此执行ssh的时间是额外的)。缺点是VirtualBox webservice必须一直运行(ssh模块不需要)。

备选方案

使用Windows的开发者可以使用嵌套虚拟化,但它确实非常慢。 另外,使SSH与Windows配合使用VBoxManage非常困难且容易出错。

数据模型影响

无。

REST API 影响

无。

RPC API 影响

无。

驱动程序 API 影响

无。

Nova 驱动程序影响

无。

安全影响

无。这仅在开发人员自己的系统上用于测试目的。

其他最终用户影响

无。

可扩展性影响

无。

性能影响

使用Windows的开发者会发现使用硬件辅助虚拟化运行的虚拟机比嵌套虚拟化部署速度更快。

其他部署者影响

需要的driver_info字段如下

  • vbox_address - VirtualBox宿主机的hostname或IP地址。

  • vbox_username - VirtualBox宿主机的用户名。

  • vbox_password - vbox_username 的密码

  • vbox_port - VirtualBox Web Service使用的端口。默认值为18083。

  • vbox_vmname - 在VirtualBox中充当裸机的VM的名称。

开发人员影响

无。

实现

负责人

rameshg87

工作项

  • 添加VirtualBoxPowerInterface。

  • 添加VirtualBoxManagementInterface

依赖项

  • 依赖于正在开发的pyremotevbox库。该库将在GitHub和PyPI上提供给开发者安装在他们的笔记本电脑上,并将具有Apache许可证。

测试

将添加单元测试。

升级和向后兼容性

无。

文档影响

如何在Windows VirtualBox中使用这些更改将在Ironic wiki中记录。

参考资料