mirror of
https://github.com/GNS3/gns3-server.git
synced 2024-12-27 00:11:07 +00:00
Fix cannot power on VirtualBox VM in saved state. Ref #1702
This commit is contained in:
parent
060871cc42
commit
50b507f76c
@ -269,12 +269,18 @@ class VirtualBoxVM(BaseNode):
|
|||||||
return
|
return
|
||||||
|
|
||||||
# VM must be powered off to start it
|
# VM must be powered off to start it
|
||||||
if vm_state != "poweroff":
|
if vm_state == "saved":
|
||||||
|
result = await self.manager.execute("guestproperty", ["get", self._uuid, "SavedByGNS3"])
|
||||||
|
if result == ['No value set!']:
|
||||||
|
raise VirtualBoxError("VirtualBox VM was not saved from GNS3")
|
||||||
|
else:
|
||||||
|
await self.manager.execute("guestproperty", ["delete", self._uuid, "SavedByGNS3"])
|
||||||
|
elif vm_state == "poweroff":
|
||||||
|
await self._set_network_options()
|
||||||
|
await self._set_serial_console()
|
||||||
|
else:
|
||||||
raise VirtualBoxError("VirtualBox VM not powered off")
|
raise VirtualBoxError("VirtualBox VM not powered off")
|
||||||
|
|
||||||
await self._set_network_options()
|
|
||||||
await self._set_serial_console()
|
|
||||||
|
|
||||||
# check if there is enough RAM to run
|
# check if there is enough RAM to run
|
||||||
self.check_available_ram(self.ram)
|
self.check_available_ram(self.ram)
|
||||||
|
|
||||||
@ -314,9 +320,11 @@ class VirtualBoxVM(BaseNode):
|
|||||||
await self._stop_ubridge()
|
await self._stop_ubridge()
|
||||||
await self._stop_remote_console()
|
await self._stop_remote_console()
|
||||||
vm_state = await self._get_vm_state()
|
vm_state = await self._get_vm_state()
|
||||||
if vm_state == "running" or vm_state == "paused" or vm_state == "stuck":
|
if vm_state in ("running", "paused", "stuck"):
|
||||||
|
|
||||||
if self.on_close == "save_vm_state":
|
if self.on_close == "save_vm_state":
|
||||||
|
# add a guest property to know the VM has been saved
|
||||||
|
await self.manager.execute("guestproperty", ["set", self._uuid, "SavedByGNS3", "yes"])
|
||||||
result = await self._control_vm("savestate")
|
result = await self._control_vm("savestate")
|
||||||
self.status = "stopped"
|
self.status = "stopped"
|
||||||
log.debug("Stop result: {}".format(result))
|
log.debug("Stop result: {}".format(result))
|
||||||
@ -343,18 +351,20 @@ class VirtualBoxVM(BaseNode):
|
|||||||
|
|
||||||
log.info("VirtualBox VM '{name}' [{id}] stopped".format(name=self.name, id=self.id))
|
log.info("VirtualBox VM '{name}' [{id}] stopped".format(name=self.name, id=self.id))
|
||||||
await asyncio.sleep(0.5) # give some time for VirtualBox to unlock the VM
|
await asyncio.sleep(0.5) # give some time for VirtualBox to unlock the VM
|
||||||
try:
|
if self.on_close != "save_vm_state":
|
||||||
# deactivate the first serial port
|
# do some cleaning when the VM is powered off
|
||||||
await self._modify_vm("--uart1 off")
|
try:
|
||||||
except VirtualBoxError as e:
|
# deactivate the first serial port
|
||||||
log.warning("Could not deactivate the first serial port: {}".format(e))
|
await self._modify_vm("--uart1 off")
|
||||||
|
except VirtualBoxError as e:
|
||||||
|
log.warning("Could not deactivate the first serial port: {}".format(e))
|
||||||
|
|
||||||
for adapter_number in range(0, self._adapters):
|
for adapter_number in range(0, self._adapters):
|
||||||
nio = self._ethernet_adapters[adapter_number].get_nio(0)
|
nio = self._ethernet_adapters[adapter_number].get_nio(0)
|
||||||
if nio:
|
if nio:
|
||||||
await self._modify_vm("--nictrace{} off".format(adapter_number + 1))
|
await self._modify_vm("--nictrace{} off".format(adapter_number + 1))
|
||||||
await self._modify_vm("--cableconnected{} off".format(adapter_number + 1))
|
await self._modify_vm("--cableconnected{} off".format(adapter_number + 1))
|
||||||
await self._modify_vm("--nic{} null".format(adapter_number + 1))
|
await self._modify_vm("--nic{} null".format(adapter_number + 1))
|
||||||
await super().stop()
|
await super().stop()
|
||||||
|
|
||||||
async def suspend(self):
|
async def suspend(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user