Start virtualbox VM one by one

Related to #190
This commit is contained in:
Julien Duponchelle 2015-06-01 11:40:42 +02:00
parent a2dfeab315
commit da72a9501a
2 changed files with 18 additions and 14 deletions

View File

@ -41,6 +41,9 @@ class VirtualBox(BaseManager):
super().__init__() super().__init__()
self._vboxmanage_path = None self._vboxmanage_path = None
# It seem starting two VM in paralell can be an issue:
# https://github.com/GNS3/gns3-server/issues/190
self.start_lock = asyncio.Lock()
self._execute_lock = asyncio.Lock() self._execute_lock = asyncio.Lock()
@property @property

View File

@ -178,23 +178,24 @@ class VirtualBoxVM(BaseVM):
if vm_state != "poweroff" and vm_state != "saved": if vm_state != "poweroff" and vm_state != "saved":
raise VirtualBoxError("VirtualBox VM not powered off or saved") raise VirtualBoxError("VirtualBox VM not powered off or saved")
yield from self._set_network_options() with (yield from self.manager.start_lock):
yield from self._set_serial_console() yield from self._set_network_options()
yield from self._set_serial_console()
args = [self._vmname] args = [self._vmname]
if self._headless: if self._headless:
args.extend(["--type", "headless"]) args.extend(["--type", "headless"])
result = yield from self.manager.execute("startvm", args) result = yield from self.manager.execute("startvm", args)
log.info("VirtualBox VM '{name}' [{id}] started".format(name=self.name, id=self.id)) log.info("VirtualBox VM '{name}' [{id}] started".format(name=self.name, id=self.id))
log.debug("Start result: {}".format(result)) log.debug("Start result: {}".format(result))
# add a guest property to let the VM know about the GNS3 name # add a guest property to let the VM know about the GNS3 name
yield from self.manager.execute("guestproperty", ["set", self._vmname, "NameInGNS3", self.name]) yield from self.manager.execute("guestproperty", ["set", self._vmname, "NameInGNS3", self.name])
# add a guest property to let the VM know about the GNS3 project directory # add a guest property to let the VM know about the GNS3 project directory
yield from self.manager.execute("guestproperty", ["set", self._vmname, "ProjectDirInGNS3", self.working_dir]) yield from self.manager.execute("guestproperty", ["set", self._vmname, "ProjectDirInGNS3", self.working_dir])
if self._enable_remote_console and self._console is not None: if self._enable_remote_console and self._console is not None:
self._start_remote_console() self._start_remote_console()
@asyncio.coroutine @asyncio.coroutine
def stop(self): def stop(self):