1
0
mirror of https://github.com/GNS3/gns3-server synced 2024-11-24 17:28:08 +00:00

Better management of the GNS3 VM with VirtualBox

This commit is contained in:
Julien Duponchelle 2016-09-21 17:01:50 +02:00
parent 896d279ded
commit 4cd164fc24
No known key found for this signature in database
GPG Key ID: CE8B29639E07F5E8
2 changed files with 28 additions and 5 deletions

View File

@ -60,7 +60,8 @@ class GNS3VM:
"engine_id": "vmware", "engine_id": "vmware",
"description": 'VMware is the recommended choice for best performances.<br>The GNS3 VM can be <a href="{}">downloaded here</a>.'.format(download_url), "description": 'VMware is the recommended choice for best performances.<br>The GNS3 VM can be <a href="{}">downloaded here</a>.'.format(download_url),
"support_when_exit": True, "support_when_exit": True,
"support_headless": True "support_headless": True,
"support_ram": True
} }
if sys.platform.startswith("darwin"): if sys.platform.startswith("darwin"):
vmware_informations["name"] = "VMware Fusion" vmware_informations["name"] = "VMware Fusion"
@ -73,7 +74,8 @@ class GNS3VM:
"name": "VirtualBox", "name": "VirtualBox",
"description": 'VirtualBox doesn\'t support nested virtualization, this means running Qemu based VM could be very slow.<br>The GNS3 VM can be <a href="{}">downloaded here</a>'.format(download_url), "description": 'VirtualBox doesn\'t support nested virtualization, this means running Qemu based VM could be very slow.<br>The GNS3 VM can be <a href="{}">downloaded here</a>'.format(download_url),
"support_when_exit": True, "support_when_exit": True,
"support_headless": True "support_headless": True,
"support_ram": True
} }
remote_informations = { remote_informations = {
@ -81,7 +83,8 @@ class GNS3VM:
"name": "Remote", "name": "Remote",
"description": "Use a remote GNS3 server as the GNS3 VM.", "description": "Use a remote GNS3 server as the GNS3 VM.",
"support_when_exit": False, "support_when_exit": False,
"support_headless": False "support_headless": False,
"support_ram": False
} }
return [ return [
@ -185,7 +188,7 @@ class GNS3VM:
else: else:
# When user fix something on his system and try again # When user fix something on his system and try again
if not self._current_engine().running and self.enable: if not self._current_engine().running and self.enable:
yield from self.auto_start_vm() yield from self.start()
def _get_engine(self, engine): def _get_engine(self, engine):
""" """

View File

@ -243,7 +243,7 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
if json_data: if json_data:
for interface in json_data: for interface in json_data:
if "name" in interface and interface["name"] == "eth{}".format(hostonly_interface_number - 1): if "name" in interface and interface["name"] == "eth{}".format(hostonly_interface_number - 1):
if "ip_address" in interface: if "ip_address" in interface and len(interface["ip_address"]) > 0:
return interface["ip_address"] return interface["ip_address"]
remaining_try -= 1 remaining_try -= 1
yield from asyncio.sleep(1) yield from asyncio.sleep(1)
@ -265,7 +265,27 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
Stops the GNS3 VM. Stops the GNS3 VM.
""" """
vm_state = yield from self._get_state()
if vm_state == "poweroff":
self.running = False
return
yield from self._execute("controlvm", [self._vmname, "acpipowerbutton"], timeout=3) yield from self._execute("controlvm", [self._vmname, "acpipowerbutton"], timeout=3)
trial = 120
while True:
try:
vm_state = yield from self._get_state()
# During a small amount of time the command will fail
except GNS3VMError:
vm_state = "running"
if vm_state == "poweroff":
break
trial -= 1
if trial == 0:
yield from self._execute("controlvm", [self._vmname, "poweroff"], timeout=3)
break
yield from asyncio.sleep(1)
log.info("GNS3 VM has been stopped") log.info("GNS3 VM has been stopped")
self.running = False self.running = False