diff --git a/gns3server/handlers/virtualbox_handler.py b/gns3server/handlers/virtualbox_handler.py index 209c68d3..8b7125a6 100644 --- a/gns3server/handlers/virtualbox_handler.py +++ b/gns3server/handlers/virtualbox_handler.py @@ -87,3 +87,41 @@ class VirtualBoxHandler: vm = vbox_manager.get_vm(request.match_info["uuid"]) yield from vm.stop() response.set_status(204) + + @classmethod + @Route.post( + r"/virtualbox/{uuid}/suspend", + parameters={ + "uuid": "VirtualBox VM instance UUID" + }, + status_codes={ + 204: "VirtualBox VM instance suspended", + 400: "Invalid VirtualBox VM instance UUID", + 404: "VirtualBox VM instance doesn't exist" + }, + description="Suspend a VirtualBox VM instance") + def suspend(request, response): + + vbox_manager = VirtualBox.instance() + vm = vbox_manager.get_vm(request.match_info["uuid"]) + yield from vm.suspend() + response.set_status(204) + + @classmethod + @Route.post( + r"/virtualbox/{uuid}/resume", + parameters={ + "uuid": "VirtualBox VM instance UUID" + }, + status_codes={ + 204: "VirtualBox VM instance resumed", + 400: "Invalid VirtualBox VM instance UUID", + 404: "VirtualBox VM instance doesn't exist" + }, + description="Resume a suspended VirtualBox VM instance") + def suspend(request, response): + + vbox_manager = VirtualBox.instance() + vm = vbox_manager.get_vm(request.match_info["uuid"]) + yield from vm.resume() + response.set_status(204) diff --git a/gns3server/modules/project.py b/gns3server/modules/project.py index 31e00171..9e83ffae 100644 --- a/gns3server/modules/project.py +++ b/gns3server/modules/project.py @@ -75,14 +75,12 @@ class Project: :param vm_uuid: VM UUID """ - p = os.path.join(self._path, module, vm_uuid) + workdir = os.path.join(self._path, module, vm_uuid) try: - os.makedirs(p, exist_ok=True) - except FileExistsError: - pass + os.makedirs(workdir, exist_ok=True) except OSError as e: raise aiohttp.web.HTTPInternalServerError(text="Could not create VM working directory: {}".format(e)) - return p + return workdir def __json__(self):