脚本化Virtualbox以创建网络
我知道VB(Visual Basic)提供了很多控制它的方式,比如SDK、API、COM、网页服务器等等。
我想做的是有一个图形界面(GUI),可以简单地创建通过网络连接的虚拟机(VM),但我需要知道:使用前端[1]、网页服务器、COM还是API,或者其他的libvirt,哪个方案最好呢?
举个例子,我可以在我的图形界面上放置3个虚拟机,选择它们各自的操作系统,为每个虚拟机创建一个或多个网络连接,并把这些虚拟机连接起来,形成网络。
用Python、C++等编程语言来实现都没关系。
1 个回答
我有资格回答这个问题,因为我从2010年初开始创建并维护Vagrant。下面是我对几种可以用来控制VirtualBox的前端工具的一些看法:
vboxwebsrv
是VirtualBox的网络服务,它提供了一个API来控制VirtualBox。优点是,现在编写网络服务相对简单。缺点是,你必须手动启动和停止这个网络服务(或者检查它是否已经在运行)。历史上,这个网络服务并没有完全跟上每个版本VirtualBox最新的API,但我不确定现在的情况如何。COM或C API
。VirtualBox在非Windows平台上提供基于XPCOM的API,而在Windows上则提供基于MSCOM的API。如果你不能使用C++,在Linux上你也可以使用C API(但在Windows上不可用)。我使用这个API超过一年。优点是速度快且功能完整。因为它是C API,所以与VirtualBox进程直接通信,非常快。而且它是完整的,因为这是VirtualBox图形界面和内部使用的同一个API。主要缺点是XPCOM不容易使用,而C API在Windows上不可用,这意味着你要么得忍受XPCOM,要么需要同时处理C和MSCOM。我选择了后者,结果发现兼容性问题非常棘手。几乎每个小版本的VirtualBox(3.1、3.2等)都会以不兼容的方式稍微改变API,而大版本更新(3.0、4.0等)就更不用说了。这使得处理旧版本的VirtualBox变得...困难。这绝对是一个高级用例。VBoxManage
是VirtualBox的命令行工具。实际上,VBoxManage
也是在使用基于COM的API,但它提供了一个更友好的界面。我发现对于99%的使用场景,VBoxManage都能满足需求。VBoxManage还处理所有的错误,正确返回状态(成功返回0,其他情况返回非零),等等。在使用了1.5年的C API后,我又回到了VBoxManage,因为它简单易用,能完成我需要做的事情。缺点是你必须通过一个子进程来与VBoxManage通信。好处是VBoxManage的更新相对较少,因此支持多个版本的VirtualBox变得非常简单。
希望这些信息对你有帮助!