From 4a05a4f7c501fb6b44c5a2c29253d495afe75ec0 Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Wed, 12 Jul 2017 10:32:02 +0200 Subject: [PATCH] Fix virtualbox links --- .../compute/virtualbox/virtualbox_vm.py | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/gns3server/compute/virtualbox/virtualbox_vm.py b/gns3server/compute/virtualbox/virtualbox_vm.py index af13ae21a..5b114fa5e 100644 --- a/gns3server/compute/virtualbox/virtualbox_vm.py +++ b/gns3server/compute/virtualbox/virtualbox_vm.py @@ -26,7 +26,6 @@ import json import uuid import shlex import shutil -import socket import asyncio import tempfile import xml.etree.ElementTree as ET @@ -285,8 +284,8 @@ class VirtualBoxVM(BaseNode): nio = self._ethernet_adapters[adapter_number].get_nio(0) if nio: yield from self.add_ubridge_udp_connection("VBOX-{}-{}".format(self._id, adapter_number), - self._local_udp_tunnels[adapter_number][1], - nio) + self._local_udp_tunnels[adapter_number][1], + nio) yield from self._start_console() @@ -968,14 +967,15 @@ class VirtualBoxVM(BaseNode): raise VirtualBoxError("Adapter {adapter_number} doesn't exist on VirtualBox VM '{name}'".format(name=self.name, adapter_number=adapter_number)) - try: - yield from self.add_ubridge_udp_connection("VBOX-{}-{}".format(self._id, adapter_number), - self._local_udp_tunnels[adapter_number][1], - nio) - except KeyError: - raise VirtualBoxError("Adapter {adapter_number} doesn't exist on VirtualBox VM '{name}'".format(name=self.name, - adapter_number=adapter_number)) - yield from self._control_vm("setlinkstate{} on".format(adapter_number + 1)) + if self.is_running(): + try: + yield from self.add_ubridge_udp_connection("VBOX-{}-{}".format(self._id, adapter_number), + self._local_udp_tunnels[adapter_number][1], + nio) + except KeyError: + raise VirtualBoxError("Adapter {adapter_number} doesn't exist on VirtualBox VM '{name}'".format(name=self.name, + adapter_number=adapter_number)) + yield from self._control_vm("setlinkstate{} on".format(adapter_number + 1)) adapter.add_nio(0, nio) log.info("VirtualBox VM '{name}' [{id}]: {nio} added to adapter {adapter_number}".format(name=self.name, @@ -999,7 +999,8 @@ class VirtualBoxVM(BaseNode): raise VirtualBoxError("Adapter {adapter_number} doesn't exist on VirtualBox VM '{name}'".format(name=self.name, adapter_number=adapter_number)) - yield from self._ubridge_send("bridge delete {name}".format(name="VBOX-{}-{}".format(self._id, adapter_number))) + if self.is_running(): + yield from self._ubridge_send("bridge delete {name}".format(name="VBOX-{}-{}".format(self._id, adapter_number))) vm_state = yield from self._get_vm_state() if vm_state == "running": yield from self._control_vm("setlinkstate{} off".format(adapter_number + 1)) @@ -1015,6 +1016,12 @@ class VirtualBoxVM(BaseNode): adapter_number=adapter_number)) return nio + def is_running(self): + """ + :returns: True if the vm is not stopped + """ + return self.ubridge is not None + @asyncio.coroutine def start_capture(self, adapter_number, output_file): """