diff --git a/gns3server/controller/compute.py b/gns3server/controller/compute.py index 8fb6de37..aed225ea 100644 --- a/gns3server/controller/compute.py +++ b/gns3server/controller/compute.py @@ -38,7 +38,7 @@ class Compute: A GNS3 compute. """ - def __init__(self, compute_id, controller=None, protocol="http", host="localhost", port=8000, user=None, password=None): + def __init__(self, compute_id, controller=None, protocol="http", host="localhost", port=8000, user=None, password=None, name=None): assert controller is not None log.info("Create compute %s", compute_id) self._id = compute_id @@ -52,6 +52,7 @@ class Compute: self._set_auth(user, password) self._session = aiohttp.ClientSession() self._version = None + self.name = name # If the compute is local but the compute id is local # it's a configuration issue @@ -79,6 +80,22 @@ class Compute: """ return self._version + @property + def name(self): + """ + :returns: Compute name + """ + return self._name + + @name.setter + def name(self, name): + if name is not None: + self._name = name + elif self._id == "local": + self._name = "local" + else: + self._name = "{}://{}:{}".format(self._protocol, self._host, self._port) + @property def connected(self): """ @@ -133,6 +150,7 @@ class Compute: def __json__(self): return { "compute_id": self._id, + "name": self._name, "protocol": self._protocol, "host": self._host, "port": self._port, diff --git a/gns3server/schemas/compute.py b/gns3server/schemas/compute.py index 3266c446..1d019627 100644 --- a/gns3server/schemas/compute.py +++ b/gns3server/schemas/compute.py @@ -25,6 +25,10 @@ COMPUTE_CREATE_SCHEMA = { "description": "Server identifier", "type": "string" }, + "name": { + "description": "Server name", + "type": "string" + }, "protocol": { "description": "Server protocol", "enum": ["http", "https"] @@ -59,6 +63,10 @@ COMPUTE_OBJECT_SCHEMA = { "description": "Server identifier", "type": "string" }, + "name": { + "description": "Server name", + "type": "string" + }, "protocol": { "description": "Server protocol", "enum": ["http", "https"] @@ -85,5 +93,5 @@ COMPUTE_OBJECT_SCHEMA = { } }, "additionalProperties": False, - "required": ["compute_id", "protocol", "host", "port"] + "required": ["compute_id", "protocol", "host", "port", "name"] } diff --git a/gns3server/templates/controller.html b/gns3server/templates/controller.html index b1bce827..632cdade 100644 --- a/gns3server/templates/controller.html +++ b/gns3server/templates/controller.html @@ -29,6 +29,7 @@ in futur GNS3 versions. + @@ -38,6 +39,7 @@ in futur GNS3 versions. {% for compute in controller.computes.values() %} + diff --git a/tests/controller/test_compute.py b/tests/controller/test_compute.py index acbdca86..b5190344 100644 --- a/tests/controller/test_compute.py +++ b/tests/controller/test_compute.py @@ -39,6 +39,16 @@ def test_init(compute): assert compute.id == "my_compute_id" +def test_name(): + c = Compute("my_compute_id", protocol="https", host="example.com", port=84, controller=MagicMock(), name=None) + assert c.name == "https://example.com:84" + with patch("gns3server.config.Config.get_section_config", return_value={"local": True}): + c = Compute("local", protocol="https", host="example.com", port=84, controller=MagicMock(), name=None) + assert c.name == "local" + c = Compute("world", protocol="https", host="example.com", port=84, controller=MagicMock(), name="hello") + assert c.name == "hello" + + def test_compute_local(compute): """ If the compute is local but the compute id is local @@ -174,6 +184,7 @@ def test_json(compute): compute.user = "test" assert compute.__json__() == { "compute_id": "my_compute_id", + "name": compute.name, "protocol": "https", "host": "example.com", "port": 84, diff --git a/tests/controller/test_controller.py b/tests/controller/test_controller.py index fe49be02..346993ad 100644 --- a/tests/controller/test_controller.py +++ b/tests/controller/test_controller.py @@ -63,7 +63,8 @@ def test_load(controller, controller_config_path, async_run): "host": "localhost", "port": 8000, "protocol": "http", - "user": "admin" + "user": "admin", + "name": "http://localhost:8000" } diff --git a/tests/handlers/api/controller/test_compute.py b/tests/handlers/api/controller/test_compute.py index 8639a1df..29b8f33a 100644 --- a/tests/handlers/api/controller/test_compute.py +++ b/tests/handlers/api/controller/test_compute.py @@ -62,7 +62,8 @@ def test_compute_list(http_controller, controller): "host": "example.com", "port": 84, "user": "julien", - "password": "secure" + "password": "secure", + "name": "My super server" } response = http_controller.post("/computes", params) assert response.status == 201 @@ -78,6 +79,8 @@ def test_compute_list(http_controller, controller): 'host': 'example.com', 'port': 84, 'protocol': 'http', - 'user': 'julien' + 'user': 'julien', + 'name': 'My super server' + } ]
IDName Version Connected Protocol
{{compute.id}}{{compute.name}} {{compute.version}} {{compute.connected}} {{compute.protocol}}