mirror of
https://github.com/GNS3/gns3-server.git
synced 2024-11-16 16:54:51 +02:00
Try a different method in order to retrieve IP from VMware
Ref https://github.com/GNS3/gns3-gui/issues/1589
This commit is contained in:
parent
1f44e08cdd
commit
9e861a7340
@ -128,8 +128,21 @@ class VMwareGNS3VM(BaseGNS3VM):
|
|||||||
args.extend(["nogui"])
|
args.extend(["nogui"])
|
||||||
yield from self._execute("start", args)
|
yield from self._execute("start", args)
|
||||||
log.info("GNS3 VM has been started")
|
log.info("GNS3 VM has been started")
|
||||||
|
|
||||||
# get the guest IP address (first adapter only)
|
# get the guest IP address (first adapter only)
|
||||||
guest_ip_address = yield from self._execute("getGuestIPAddress", [self._vmx_path, "-wait"], timeout=120)
|
trial = 120
|
||||||
|
guest_ip_address = ""
|
||||||
|
while True:
|
||||||
|
guest_ip_address = yield from self._execute("readVariable", [self._vmx_path, "guestVar", "gns3.eth0"], timeout=120)
|
||||||
|
guest_ip_address = guest_ip_address.strip()
|
||||||
|
if len(guest_ip_address) != 0:
|
||||||
|
break
|
||||||
|
trial -= 1
|
||||||
|
# If ip not found fallback on old method
|
||||||
|
if trial == 0:
|
||||||
|
guest_ip_address = yield from self._execute("getGuestIPAddress", [self._vmx_path, "-wait"], timeout=120)
|
||||||
|
break
|
||||||
|
yield from asyncio.sleep(1)
|
||||||
self.ip_address = guest_ip_address
|
self.ip_address = guest_ip_address
|
||||||
log.info("GNS3 VM IP address set to {}".format(guest_ip_address))
|
log.info("GNS3 VM IP address set to {}".format(guest_ip_address))
|
||||||
self.running = True
|
self.running = True
|
||||||
|
@ -26,8 +26,10 @@ import datetime
|
|||||||
import sys
|
import sys
|
||||||
import locale
|
import locale
|
||||||
import argparse
|
import argparse
|
||||||
|
import shutil
|
||||||
import psutil
|
import psutil
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
from gns3server.web.web_server import WebServer
|
from gns3server.web.web_server import WebServer
|
||||||
@ -199,6 +201,29 @@ def kill_ghosts():
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def set_vmware_gns3vm_ip():
|
||||||
|
"""
|
||||||
|
For the GNS3 VM on VMware we need to get the ip of eth0.
|
||||||
|
vmrun getGuestIPAddress is not reliable because it's return a
|
||||||
|
random ip from one of the available interfaces.
|
||||||
|
|
||||||
|
We need to set a VMware variable with the value and this
|
||||||
|
will allow the VM host machine to retrieve it
|
||||||
|
"""
|
||||||
|
vmtoolsd = shutil.which("vmtoolsd")
|
||||||
|
if not vmtoolsd:
|
||||||
|
return
|
||||||
|
ip = None
|
||||||
|
try:
|
||||||
|
for a in psutil.net_if_addrs()["eth0"]:
|
||||||
|
if ":" not in a.address:
|
||||||
|
ip = a.address
|
||||||
|
except (KeyError, IndexError):
|
||||||
|
return
|
||||||
|
if ip:
|
||||||
|
subprocess.call(["vmtoolsd", "--cmd", "info-set guestinfo.gns3.eth0 {}".format(ip)])
|
||||||
|
|
||||||
|
|
||||||
def run():
|
def run():
|
||||||
args = parse_arguments(sys.argv[1:])
|
args = parse_arguments(sys.argv[1:])
|
||||||
|
|
||||||
@ -222,6 +247,8 @@ def run():
|
|||||||
for config_file in Config.instance().get_config_files():
|
for config_file in Config.instance().get_config_files():
|
||||||
user_log.info("Config file {} loaded".format(config_file))
|
user_log.info("Config file {} loaded".format(config_file))
|
||||||
|
|
||||||
|
set_vmware_gns3vm_ip()
|
||||||
|
|
||||||
set_config(args)
|
set_config(args)
|
||||||
server_config = Config.instance().get_section_config("Server")
|
server_config = Config.instance().get_section_config("Server")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user