diff --git a/gns3server/controller/node.py b/gns3server/controller/node.py index d43c3be6..ade3c695 100644 --- a/gns3server/controller/node.py +++ b/gns3server/controller/node.py @@ -36,7 +36,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", - "port_name_format", "first_port_name", "port_segment_size", "ports"] + "port_name_format", "first_port_name", "port_segment_size", "ports", + "category"] def __init__(self, project, compute, name, node_id=None, node_type=None, **kwargs): """ @@ -90,11 +91,14 @@ class Node: # Update node properties with additional elements for prop in kwargs: if prop not in ignore_properties: - try: - setattr(self, prop, kwargs[prop]) - except AttributeError as e: - log.critical("Can't set attribute %s", prop) - raise e + if hasattr(self, prop): + try: + setattr(self, prop, kwargs[prop]) + except AttributeError as e: + log.critical("Can't set attribute %s", prop) + raise e + else: + self.properties[prop] = kwargs[prop] if self._symbol is None: self.symbol = ":/symbols/computer.svg" diff --git a/tests/controller/test_node.py b/tests/controller/test_node.py index 0d7e7456..e979b7dc 100644 --- a/tests/controller/test_node.py +++ b/tests/controller/test_node.py @@ -81,6 +81,18 @@ def test_name(compute, project): assert node.name == "PC2" +def test_vmname(compute, project): + """ + Additionnal properties should add to the properties + field + """ + node = Node(project, compute, "PC", + node_id=str(uuid.uuid4()), + node_type="virtualbox", + vmname="test") + assert node.properties["vmname"] == "test" + + def test_eq(compute, project, node, controller): assert node == Node(project, compute, "demo1", node_id=node.id, node_type="qemu") assert node != "a"