Fixes bug with VMware VM connections + moves some uBridge code to BaseVM.

This commit is contained in:
grossmj
2015-09-13 14:52:25 -06:00
parent 0ee31361c0
commit 65fa4036c6
3 changed files with 63 additions and 34 deletions

View File

@ -22,12 +22,9 @@ VMware VM instance.
import sys
import os
import socket
import shutil
import asyncio
import tempfile
from pkg_resources import parse_version
from gns3server.ubridge.hypervisor import Hypervisor
from gns3server.utils.telnet_server import TelnetServer
from gns3server.utils.interfaces import get_windows_interfaces
from collections import OrderedDict
@ -57,7 +54,6 @@ class VMwareVM(BaseVM):
self._linked_clone = linked_clone
self._vmx_pairs = OrderedDict()
self._ubridge_hypervisor = None
self._telnet_server_thread = None
self._serial_pipe = None
self._vmnets = []
@ -283,6 +279,11 @@ class VMwareVM(BaseVM):
if not vmnet in self._vmnets:
self._vmnets.append(vmnet)
self._vmx_pairs["ethernet{}.vnet".format(adapter_number)] = vmnet
else:
# not connected to anything...
vnet = "ethernet{}.vnet".format(adapter_number)
if vnet not in self._vmx_pairs:
self._vmx_pairs["ethernet{}.startconnected".format(adapter_number)] = "FALSE"
# disable remaining network adapters
for adapter_number in range(self._adapters, self._maximum_adapters):
@ -380,36 +381,6 @@ class VMwareVM(BaseVM):
raise VMwareError("vnet {} not in VMX file".format(vnet))
yield from self._ubridge_hypervisor.send("bridge stop_capture {name}".format(name=vnet))
@property
def ubridge_path(self):
"""
Returns the uBridge executable path.
:returns: path to uBridge
"""
path = self._manager.config.get_section_config("Server").get("ubridge_path", "ubridge")
if path == "ubridge":
path = shutil.which("ubridge")
return path
@asyncio.coroutine
def _start_ubridge(self):
"""
Starts uBridge (handles connections to and from this VMware VM).
"""
server_config = self._manager.config.get_section_config("Server")
server_host = server_config.get("host")
self._ubridge_hypervisor = Hypervisor(self._project, self.ubridge_path, self.working_dir, server_host)
log.info("Starting new uBridge hypervisor {}:{}".format(self._ubridge_hypervisor.host, self._ubridge_hypervisor.port))
yield from self._ubridge_hypervisor.start()
log.info("Hypervisor {}:{} has successfully started".format(self._ubridge_hypervisor.host, self._ubridge_hypervisor.port))
yield from self._ubridge_hypervisor.connect()
if parse_version(self._ubridge_hypervisor.version) < parse_version('0.9.1'):
raise VMwareError("uBridge version must be >= 0.9.1, detected version is {}".format(self._ubridge_hypervisor.version))
def check_hw_virtualization(self):
"""
Returns either hardware virtualization is activated or not.