diff --git a/gns3server/controller/project.py b/gns3server/controller/project.py index 38b2754d..3c192660 100644 --- a/gns3server/controller/project.py +++ b/gns3server/controller/project.py @@ -437,6 +437,9 @@ class Project: """ :return: List of computes used by the project """ + + if self._status == "closed": + return self._get_closed_data("computes", "compute_id").values() return self._project_created_on_compute def remove_allocated_node_name(self, name): diff --git a/gns3server/controller/topology.py b/gns3server/controller/topology.py index 8e764472..06643b03 100644 --- a/gns3server/controller/topology.py +++ b/gns3server/controller/topology.py @@ -99,19 +99,28 @@ def project_to_topology(project): "version": __version__ } - computes = set() for node in project.nodes.values(): - computes.add(node.compute) - data["topology"]["nodes"].append(node.__json__(topology_dump=True)) + if hasattr(node, "__json__"): + data["topology"]["nodes"].append(node.__json__(topology_dump=True)) + else: + data["topology"]["nodes"].append(node) for link in project.links.values(): - data["topology"]["links"].append(link.__json__(topology_dump=True)) + if hasattr(link, "__json__"): + data["topology"]["links"].append(link.__json__(topology_dump=True)) + else: + data["topology"]["links"].append(link) for drawing in project.drawings.values(): - data["topology"]["drawings"].append(drawing.__json__(topology_dump=True)) - for compute in computes: + if hasattr(drawing, "__json__"): + data["topology"]["drawings"].append(drawing.__json__(topology_dump=True)) + else: + data["topology"]["drawings"].append(drawing) + for compute in project.computes: if hasattr(compute, "__json__"): compute = compute.__json__(topology_dump=True) if compute["compute_id"] not in ("vm", "local", ): data["topology"]["computes"].append(compute) + else: + data["topology"]["computes"].append(compute) _check_topology_schema(data) return data