mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-11-04 06:21:15 +02:00
50 files changed
+1347
-240
No files matched your search
@@ -23,6 +23,7 @@ import os
|
||||
|
||||
|
||||
from .compute import ComputeConflict
|
||||
from .ports.port_factory import PortFactory, StandardPortFactory, DynamipsPortFactory
|
||||
from ..utils.images import images_directories
|
||||
from ..utils.qt import qt_font_to_style
|
||||
|
||||
@@ -33,7 +34,8 @@ log = logging.getLogger(__name__)
|
||||
|
||||
class Node:
|
||||
# This properties are used only on controller and are not forwarded to the compute
|
||||
CONTROLLER_ONLY_PROPERTIES = ["x", "y", "z", "width", "height", "symbol", "label", "console_host"]
|
||||
CONTROLLER_ONLY_PROPERTIES = ["x", "y", "z", "width", "height", "symbol", "label", "console_host",
|
||||
"port_name_format", "first_port_name", "port_segment_size", "ports"]
|
||||
|
||||
def __init__(self, project, compute, name, node_id=None, node_type=None, **kwargs):
|
||||
"""
|
||||
@@ -69,12 +71,20 @@ class Node:
|
||||
self._y = 0
|
||||
self._z = 0
|
||||
self._symbol = None
|
||||
|
||||
# Update node properties with additional elements
|
||||
if node_type == "iou":
|
||||
self._port_name_format = "Ethernet{segment0}/{port0}"
|
||||
self._port_by_adapter = 4
|
||||
self.port_segment_size = 4
|
||||
else:
|
||||
self._port_name_format = "Ethernet{0}"
|
||||
self._port_by_adapter = 1
|
||||
self._port_segment_size = 0
|
||||
self._first_port_name = None
|
||||
|
||||
# This properties will be recompute
|
||||
ignore_properties = ("width", "height")
|
||||
|
||||
# Update node properties with additional elements
|
||||
for prop in kwargs:
|
||||
if prop not in ignore_properties:
|
||||
try:
|
||||
@@ -220,6 +230,30 @@ class Node:
|
||||
val["text"] = self._name
|
||||
self._label = val
|
||||
|
||||
@property
|
||||
def port_name_format(self):
|
||||
return self._port_name_format
|
||||
|
||||
@port_name_format.setter
|
||||
def port_name_format(self, val):
|
||||
self._port_name_format = val
|
||||
|
||||
@property
|
||||
def port_segment_size(self):
|
||||
return self._port_segment_size
|
||||
|
||||
@port_segment_size.setter
|
||||
def port_segment_size(self, val):
|
||||
self._port_segment_size = val
|
||||
|
||||
@property
|
||||
def first_port_name(self):
|
||||
return self._first_port_name
|
||||
|
||||
@first_port_name.setter
|
||||
def first_port_name(self, val):
|
||||
self._first_port_name = val
|
||||
|
||||
@asyncio.coroutine
|
||||
def create(self):
|
||||
"""
|
||||
@@ -423,6 +457,27 @@ class Node:
|
||||
"""
|
||||
return (yield from self._compute.get("/projects/{}/{}/nodes/{}/idlepc_proposals".format(self._project.id, self._node_type, self._id), timeout=240)).json
|
||||
|
||||
def _list_ports(self):
|
||||
"""
|
||||
Generate the list of port display in the client
|
||||
if the compute has sent a list we return it (use by
|
||||
node where you can not personnalize the port naming).
|
||||
"""
|
||||
ports = []
|
||||
# Some special cases
|
||||
if self._node_type == "atm_switch":
|
||||
for adapter_number in range(0, len(self.properties["mappings"])):
|
||||
ports.append(PortFactory("ATM{}".format(adapter_number), adapter_number, adapter_number, 0, "atm"))
|
||||
return ports
|
||||
elif self._node_type == "frame_relay_switch":
|
||||
for adapter_number in range(0, len(self.properties["mappings"])):
|
||||
ports.append(PortFactory("FrameRelay{}".format(adapter_number), adapter_number, adapter_number, 0, "frame_relay"))
|
||||
return ports
|
||||
elif self._node_type == "dynamips":
|
||||
return DynamipsPortFactory(self.properties)
|
||||
else:
|
||||
return StandardPortFactory(self.properties, self._port_by_adapter, self._first_port_name, self._port_name_format, self._port_segment_size)
|
||||
|
||||
def __repr__(self):
|
||||
return "<gns3server.controller.Node {} {}>".format(self._node_type, self._name)
|
||||
|
||||
@@ -450,7 +505,10 @@ class Node:
|
||||
"z": self._z,
|
||||
"width": self._width,
|
||||
"height": self._height,
|
||||
"symbol": self._symbol
|
||||
"symbol": self._symbol,
|
||||
"port_name_format": self._port_name_format,
|
||||
"port_segment_size": self._port_segment_size,
|
||||
"first_port_name": self._first_port_name
|
||||
}
|
||||
return {
|
||||
"compute_id": str(self._compute.id),
|
||||
@@ -471,5 +529,9 @@ class Node:
|
||||
"z": self._z,
|
||||
"width": self._width,
|
||||
"height": self._height,
|
||||
"symbol": self._symbol
|
||||
"symbol": self._symbol,
|
||||
"port_name_format": self._port_name_format,
|
||||
"port_segment_size": self._port_segment_size,
|
||||
"first_port_name": self._first_port_name,
|
||||
"ports": [port.__json__() for port in self._list_ports()]
|
||||
}
|
||||
Reference in new issue
Block a user