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

Correctly recover id when closing VMS

Fixes #91
This commit is contained in:
Julien Duponchelle 2015-03-06 15:48:16 +01:00
parent d657f94c18
commit e37392c482
4 changed files with 12 additions and 15 deletions

View File

@ -46,13 +46,14 @@ class IOU(BaseManager):
return vm return vm
@asyncio.coroutine @asyncio.coroutine
def delete_vm(self, vm_id, *args, **kwargs): def close_vm(self, vm_id, *args, **kwargs):
vm = self.get_vm(vm_id) vm = self.get_vm(vm_id)
i = self._used_application_ids[vm_id] i = self._used_application_ids[vm_id]
self._free_application_ids.insert(0, i) self._free_application_ids.insert(0, i)
del self._used_application_ids[vm_id] del self._used_application_ids[vm_id]
yield from super().delete_vm(vm_id, *args, **kwargs) yield from super().close_vm(vm_id, *args, **kwargs)
return vm
def get_application_id(self, vm_id): def get_application_id(self, vm_id):
""" """

View File

@ -274,10 +274,7 @@ class Project:
tasks = [] tasks = []
for vm in self._vms: for vm in self._vms:
if asyncio.iscoroutinefunction(vm.close): tasks.append(asyncio.async(vm.manager.close_vm(vm.id)))
tasks.append(asyncio.async(vm.close()))
else:
vm.close()
if tasks: if tasks:
done, _ = yield from asyncio.wait(tasks) done, _ = yield from asyncio.wait(tasks)

View File

@ -47,13 +47,14 @@ class VPCS(BaseManager):
return vm return vm
@asyncio.coroutine @asyncio.coroutine
def delete_vm(self, vm_id, *args, **kwargs): def close_vm(self, vm_id, *args, **kwargs):
vm = self.get_vm(vm_id) vm = self.get_vm(vm_id)
i = self._used_mac_ids[vm_id] i = self._used_mac_ids[vm_id]
self._free_mac_ids[vm.project.id].insert(0, i) self._free_mac_ids[vm.project.id].insert(0, i)
del self._used_mac_ids[vm_id] del self._used_mac_ids[vm_id]
yield from super().delete_vm(vm_id, *args, **kwargs) yield from super().close_vm(vm_id, *args, **kwargs)
return vm
def get_mac_id(self, vm_id): def get_mac_id(self, vm_id):
""" """

View File

@ -37,8 +37,9 @@ def manager(port_manager):
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def vm(project, manager): def vm(project, manager, loop):
return VPCSVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", project, manager) vm = manager.create_vm("test", project.id, "00010203-0405-0607-0809-0a0b0c0d0e0f")
return loop.run_until_complete(asyncio.async(vm))
def test_affect_uuid(): def test_affect_uuid():
@ -180,11 +181,8 @@ def test_project_add_vm(manager):
assert len(project.vms) == 1 assert len(project.vms) == 1
def test_project_close(loop, manager): def test_project_close(loop, vm, project):
project = Project()
vm = VPCSVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", project, manager)
project.add_vm(vm)
vm.manager._vms = {vm.id: vm}
with asyncio_patch("gns3server.modules.vpcs.vpcs_vm.VPCSVM.close") as mock: with asyncio_patch("gns3server.modules.vpcs.vpcs_vm.VPCSVM.close") as mock:
loop.run_until_complete(asyncio.async(project.close())) loop.run_until_complete(asyncio.async(project.close()))
assert mock.called assert mock.called