1
0
mirror of https://github.com/GNS3/gns3-server synced 2024-12-26 00:38:10 +00:00

Fix small errors like unhandled exceptions etc.

This commit is contained in:
grossmj 2018-09-11 15:06:01 +02:00
parent 0aa9ab53d1
commit 17d657c919
12 changed files with 37 additions and 26 deletions

View File

@ -163,7 +163,7 @@ class Cloud(BaseNode):
try: try:
output = yield from gns3server.utils.asyncio.subprocess_check_output("networksetup", "-listallhardwareports") output = yield from gns3server.utils.asyncio.subprocess_check_output("networksetup", "-listallhardwareports")
except (FileNotFoundError, subprocess.SubprocessError) as e: except (OSError, subprocess.SubprocessError) as e:
log.warn("Could not execute networksetup: {}".format(e)) log.warn("Could not execute networksetup: {}".format(e))
return False return False

View File

@ -526,8 +526,8 @@ class DockerVM(BaseNode):
x11_socket = os.path.join("/tmp/.X11-unix/", "X{}".format(self._display)) x11_socket = os.path.join("/tmp/.X11-unix/", "X{}".format(self._display))
yield from wait_for_file_creation(x11_socket) yield from wait_for_file_creation(x11_socket)
monitor_process(self._xvfb_process, self._xvfb_callback) #monitor_process(self._xvfb_process, self._xvfb_callback)
monitor_process(self._x11vnc_process, self._x11vnc_callback) #monitor_process(self._x11vnc_process, self._x11vnc_callback)
def _xvfb_callback(self, returncode): def _xvfb_callback(self, returncode):
""" """

View File

@ -368,7 +368,7 @@ class IOUVM(BaseNode):
try: try:
output = yield from gns3server.utils.asyncio.subprocess_check_output("ldd", self._path) output = yield from gns3server.utils.asyncio.subprocess_check_output("ldd", self._path)
except (FileNotFoundError, subprocess.SubprocessError) as e: except (OSError, subprocess.SubprocessError) as e:
log.warn("Could not determine the shared library dependencies for {}: {}".format(self._path, e)) log.warn("Could not determine the shared library dependencies for {}: {}".format(self._path, e))
return return
@ -421,7 +421,7 @@ class IOUVM(BaseNode):
hostid = (yield from gns3server.utils.asyncio.subprocess_check_output("hostid")).strip() hostid = (yield from gns3server.utils.asyncio.subprocess_check_output("hostid")).strip()
except FileNotFoundError as e: except FileNotFoundError as e:
raise IOUError("Could not find hostid: {}".format(e)) raise IOUError("Could not find hostid: {}".format(e))
except subprocess.SubprocessError as e: except (OSError, subprocess.SubprocessError) as e:
raise IOUError("Could not execute hostid: {}".format(e)) raise IOUError("Could not execute hostid: {}".format(e))
try: try:

View File

@ -193,7 +193,7 @@ class Qemu(BaseManager):
return version return version
else: else:
raise QemuError("Could not determine the Qemu version for {}".format(qemu_path)) raise QemuError("Could not determine the Qemu version for {}".format(qemu_path))
except subprocess.SubprocessError as e: except (OSError, subprocess.SubprocessError) as e:
raise QemuError("Error while looking for the Qemu version: {}".format(e)) raise QemuError("Error while looking for the Qemu version: {}".format(e))
@staticmethod @staticmethod
@ -213,7 +213,7 @@ class Qemu(BaseManager):
return version return version
else: else:
raise QemuError("Could not determine the Qemu-img version for {}".format(qemu_img_path)) raise QemuError("Could not determine the Qemu-img version for {}".format(qemu_img_path))
except subprocess.SubprocessError as e: except (OSError, subprocess.SubprocessError) as e:
raise QemuError("Error while looking for the Qemu-img version: {}".format(e)) raise QemuError("Error while looking for the Qemu-img version: {}".format(e))
@staticmethod @staticmethod

View File

@ -217,6 +217,8 @@ class VirtualBoxVM(BaseNode):
except ET.ParseError: except ET.ParseError:
raise VirtualBoxError("Cannot modify VirtualBox linked nodes file. " raise VirtualBoxError("Cannot modify VirtualBox linked nodes file. "
"File {} is corrupted.".format(self._linked_vbox_file())) "File {} is corrupted.".format(self._linked_vbox_file()))
except OSError as e:
raise VirtualBoxError("Cannot modify VirtualBox linked nodes file '{}': {}".format(self._linked_vbox_file(), e))
machine = tree.getroot().find("{http://www.virtualbox.org/}Machine") machine = tree.getroot().find("{http://www.virtualbox.org/}Machine")
if machine is not None and machine.get("uuid") != "{" + self.id + "}": if machine is not None and machine.get("uuid") != "{" + self.id + "}":
@ -245,6 +247,7 @@ class VirtualBoxVM(BaseNode):
return True return True
return False return False
@locking
@asyncio.coroutine @asyncio.coroutine
def start(self): def start(self):
""" """

View File

@ -66,9 +66,7 @@ class Controller:
def load_appliances(self): def load_appliances(self):
self._appliance_templates = {} self._appliance_templates = {}
for directory, builtin in ( for directory, builtin in ((get_resource('appliances'), True,), (self.appliances_path(), False,)):
(get_resource('appliances'), True,), (self.appliances_path(), False,)
):
if directory and os.path.isdir(directory): if directory and os.path.isdir(directory):
for file in os.listdir(directory): for file in os.listdir(directory):
if not file.endswith('.gns3a') and not file.endswith('.gns3appliance'): if not file.endswith('.gns3a') and not file.endswith('.gns3appliance'):
@ -200,7 +198,7 @@ class Controller:
for c in computes: for c in computes:
try: try:
yield from self.add_compute(**c) yield from self.add_compute(**c)
except (aiohttp.web.HTTPConflict, KeyError): except (aiohttp.web.HTTPError, KeyError):
pass # Skip not available servers at loading pass # Skip not available servers at loading
yield from self.load_projects() yield from self.load_projects()
try: try:

View File

@ -175,7 +175,7 @@ class Node:
if not os.path.isabs(path): if not os.path.isabs(path):
path = os.path.join(self.project.controller.configs_path(), path) path = os.path.join(self.project.controller.configs_path(), path)
try: try:
with open(path) as f: with open(path, encoding="utf-8") as f:
return f.read() return f.read()
except OSError: except OSError:
return None return None

View File

@ -843,7 +843,7 @@ class Project:
link = yield from self.add_link(link_id=link_data["link_id"]) link = yield from self.add_link(link_id=link_data["link_id"])
if "filters" in link_data: if "filters" in link_data:
yield from link.update_filters(link_data["filters"]) yield from link.update_filters(link_data["filters"])
for node_link in link_data["nodes"]: for node_link in link_data.get("nodes", []):
node = self.get_node(node_link["node_id"]) node = self.get_node(node_link["node_id"])
port = node.get_port(node_link["adapter_number"], node_link["port_number"]) port = node.get_port(node_link["adapter_number"], node_link["port_number"])
if port is None: if port is None:

View File

@ -22,6 +22,9 @@ from ..utils.get_resource import get_resource
from ..utils.picture import get_size from ..utils.picture import get_size
from ..config import Config from ..config import Config
import logging
log = logging.getLogger(__name__)
class Symbols: class Symbols:
""" """
@ -72,19 +75,25 @@ class Symbols:
def symbols_path(self): def symbols_path(self):
directory = os.path.expanduser(Config.instance().get_section_config("Server").get("symbols_path", "~/GNS3/symbols")) directory = os.path.expanduser(Config.instance().get_section_config("Server").get("symbols_path", "~/GNS3/symbols"))
if directory: if directory:
os.makedirs(directory, exist_ok=True) try:
os.makedirs(directory, exist_ok=True)
except OSError as e:
log.error("Could not create symbol directory '{}': {}".format(directory, e))
return None
return directory return directory
def get_path(self, symbol_id): def get_path(self, symbol_id):
try: try:
return self._symbols_path[symbol_id] return self._symbols_path[symbol_id]
# Symbol not found refresh cache # Symbol not found, let's refresh the cache
except KeyError: except KeyError:
self.list()
try: try:
self.list()
return self._symbols_path[symbol_id] return self._symbols_path[symbol_id]
except KeyError: except (OSError, KeyError):
return self._symbols_path[":/symbols/computer.svg"] log.warning("Could not retrieve symbol '{}'".format(symbol_id))
symbols_path = self._symbols_path
return symbols_path[":/symbols/computer.svg"]
def get_size(self, symbol_id): def get_size(self, symbol_id):
try: try:

View File

@ -409,7 +409,7 @@ def _convert_1_3_later(topo, topo_path):
symbol = old_node.get("symbol", ":/symbols/computer.svg") symbol = old_node.get("symbol", ":/symbols/computer.svg")
old_node["ports"] = _create_cloud(node, old_node, symbol) old_node["ports"] = _create_cloud(node, old_node, symbol)
else: else:
raise NotImplementedError("Conversion of {} is not supported".format(old_node["type"])) raise aiohttp.web.HTTPConflict(text="Conversion of {} is not supported".format(old_node["type"]))
for prop in old_node.get("properties", {}): for prop in old_node.get("properties", {}):
if prop not in ["console", "name", "console_type", "console_host", "use_ubridge"]: if prop not in ["console", "name", "console_type", "console_host", "use_ubridge"]:
@ -608,13 +608,13 @@ def _create_cloud(node, old_node, icon):
elif old_port["name"].startswith("nio_nat"): elif old_port["name"].startswith("nio_nat"):
continue continue
else: else:
raise NotImplementedError("The conversion of cloud with {} is not supported".format(old_port["name"])) raise aiohttp.web.HTTPConflict(text="The conversion of cloud with {} is not supported".format(old_port["name"]))
if port_type == "udp": if port_type == "udp":
try: try:
_, lport, rhost, rport = old_port["name"].split(":") _, lport, rhost, rport = old_port["name"].split(":")
except ValueError: except ValueError:
raise NotImplementedError("UDP tunnel using IPV6 is not supported in cloud") raise aiohttp.web.HTTPConflict(text="UDP tunnel using IPV6 is not supported in cloud")
port = { port = {
"name": "UDP tunnel {}".format(len(ports) + 1), "name": "UDP tunnel {}".format(len(ports) + 1),
"port_number": len(ports) + 1, "port_number": len(ports) + 1,
@ -645,7 +645,7 @@ def _convert_snapshots(topo_dir):
old_snapshots_dir = os.path.join(topo_dir, "project-files", "snapshots") old_snapshots_dir = os.path.join(topo_dir, "project-files", "snapshots")
if os.path.exists(old_snapshots_dir): if os.path.exists(old_snapshots_dir):
new_snapshots_dir = os.path.join(topo_dir, "snapshots") new_snapshots_dir = os.path.join(topo_dir, "snapshots")
os.makedirs(new_snapshots_dir) os.makedirs(new_snapshots_dir, exist_ok=True)
for snapshot in os.listdir(old_snapshots_dir): for snapshot in os.listdir(old_snapshots_dir):
snapshot_dir = os.path.join(old_snapshots_dir, snapshot) snapshot_dir = os.path.join(old_snapshots_dir, snapshot)

View File

@ -52,7 +52,8 @@ class SymbolHandler:
controller = Controller.instance() controller = Controller.instance()
try: try:
yield from response.file(controller.symbols.get_path(request.match_info["symbol_id"])) yield from response.file(controller.symbols.get_path(request.match_info["symbol_id"]))
except (KeyError, FileNotFoundError, PermissionError): except (KeyError, OSError) as e:
log.warning("Could not get symbol file: {}".format(e))
response.set_status(404) response.set_status(404)
@Route.post( @Route.post(
@ -66,7 +67,7 @@ class SymbolHandler:
controller = Controller.instance() controller = Controller.instance()
path = os.path.join(controller.symbols.symbols_path(), os.path.basename(request.match_info["symbol_id"])) path = os.path.join(controller.symbols.symbols_path(), os.path.basename(request.match_info["symbol_id"]))
try: try:
with open(path, 'wb') as f: with open(path, "wb") as f:
while True: while True:
try: try:
chunk = yield from request.content.read(1024) chunk = yield from request.content.read(1024)
@ -75,7 +76,7 @@ class SymbolHandler:
if not chunk: if not chunk:
break break
f.write(chunk) f.write(chunk)
except OSError as e: except (UnicodeEncodeError, OSError) as e:
raise aiohttp.web.HTTPConflict(text="Could not write symbol file '{}': {}".format(path, e)) raise aiohttp.web.HTTPConflict(text="Could not write symbol file '{}': {}".format(path, e))
# Reset the symbol list # Reset the symbol list
controller.symbols.list() controller.symbols.list()

View File

@ -178,7 +178,7 @@ class Hypervisor(UBridgeHypervisor):
env=env) env=env)
log.info("ubridge started PID={}".format(self._process.pid)) log.info("ubridge started PID={}".format(self._process.pid))
except (OSError, PermissionError, subprocess.SubprocessError) as e: except (OSError, subprocess.SubprocessError) as e:
ubridge_stdout = self.read_stdout() ubridge_stdout = self.read_stdout()
log.error("Could not start ubridge: {}\n{}".format(e, ubridge_stdout)) log.error("Could not start ubridge: {}\n{}".format(e, ubridge_stdout))
raise UbridgeError("Could not start ubridge: {}\n{}".format(e, ubridge_stdout)) raise UbridgeError("Could not start ubridge: {}\n{}".format(e, ubridge_stdout))