From a6869379c3c1485f706a087f2b7b4f88fdf93627 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Mon, 2 Mar 2015 17:28:28 -0700 Subject: [PATCH] Fixes console restoration when loading a VirtualBox project. --- gns3server/handlers/api/virtualbox_handler.py | 7 +++++++ gns3server/modules/virtualbox/virtualbox_vm.py | 12 +++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/gns3server/handlers/api/virtualbox_handler.py b/gns3server/handlers/api/virtualbox_handler.py index be75c4cf..93d6a039 100644 --- a/gns3server/handlers/api/virtualbox_handler.py +++ b/gns3server/handlers/api/virtualbox_handler.py @@ -67,8 +67,12 @@ class VirtualBoxHandler: request.json.get("vm_id"), request.json.pop("vmname"), request.json.pop("linked_clone"), + console=request.json.get("console", None), adapters=request.json.get("adapters", 0)) + if "enable_remote_console" in request.json: + yield from vm.set_enable_remote_console(request.json.pop("enable_remote_console")) + for name, value in request.json.items(): if hasattr(vm, name) and getattr(vm, name) != value: setattr(vm, name, value) @@ -117,6 +121,9 @@ class VirtualBoxHandler: vbox_manager = VirtualBox.instance() vm = vbox_manager.get_vm(request.match_info["vm_id"], project_id=request.match_info["project_id"]) + if "enable_remote_console" in request.json: + yield from vm.set_enable_remote_console(request.json.pop("enable_remote_console")) + for name, value in request.json.items(): if hasattr(vm, name) and getattr(vm, name) != value: setattr(vm, name, value) diff --git a/gns3server/modules/virtualbox/virtualbox_vm.py b/gns3server/modules/virtualbox/virtualbox_vm.py index a7b61fe6..0d93d281 100644 --- a/gns3server/modules/virtualbox/virtualbox_vm.py +++ b/gns3server/modules/virtualbox/virtualbox_vm.py @@ -49,9 +49,9 @@ class VirtualBoxVM(BaseVM): VirtualBox VM implementation. """ - def __init__(self, name, vm_id, project, manager, vmname, linked_clone, adapters=0): + def __init__(self, name, vm_id, project, manager, vmname, linked_clone, console=None, adapters=0): - super().__init__(name, vm_id, project, manager) + super().__init__(name, vm_id, project, manager, console=console) self._maximum_adapters = 8 self._linked_clone = linked_clone @@ -389,8 +389,8 @@ class VirtualBoxVM(BaseVM): return self._enable_remote_console - @enable_remote_console.setter - def enable_remote_console(self, enable_remote_console): + @asyncio.coroutine + def set_enable_remote_console(self, enable_remote_console): """ Sets either the console is enabled or not @@ -399,7 +399,9 @@ class VirtualBoxVM(BaseVM): if enable_remote_console: log.info("VirtualBox VM '{name}' [{id}] has enabled the console".format(name=self.name, id=self.id)) - self._start_remote_console() + vm_state = yield from self._get_vm_state() + if vm_state == "running": + self._start_remote_console() else: log.info("VirtualBox VM '{name}' [{id}] has disabled the console".format(name=self.name, id=self.id)) self._stop_remote_console()