diff --git a/gns3server/controller/__init__.py b/gns3server/controller/__init__.py index 8be50bb3..61a3b075 100644 --- a/gns3server/controller/__init__.py +++ b/gns3server/controller/__init__.py @@ -85,6 +85,7 @@ class Controller: """ if not os.path.exists(self._config_file): + yield from self._import_gns3_gui_conf() self.save() try: with open(self._config_file) as f: @@ -115,6 +116,26 @@ class Controller: except OSError as e: log.error(str(e)) + @asyncio.coroutine + def _import_gns3_gui_conf(self): + """ + Import old config from GNS3 GUI + """ + config_file = os.path.join(os.path.dirname(self._config_file), "gns3_gui.conf") + if os.path.exists(config_file): + with open(config_file) as f: + data = json.load(f) + for remote in data.get("Servers", {}).get("remote_servers", []): + print("a") + yield from self.add_compute( + host=remote.get("host", "localhost"), + port=remote.get("port", 3080), + protocol=remote.get("protocol", "http"), + name=remote.get("url"), + user=remote.get("user"), + password=remote.get("password") + ) + @property def settings(self): """ diff --git a/tests/controller/test_controller.py b/tests/controller/test_controller.py index d791cab0..0bca4b2d 100644 --- a/tests/controller/test_controller.py +++ b/tests/controller/test_controller.py @@ -73,6 +73,41 @@ def test_load(controller, controller_config_path, async_run): } +def test_import_computes(controller, controller_config_path, async_run): + """ + At first start the server should import the + computes from the gns3_gui + """ + gns3_gui_conf = { + "Servers": { + "remote_servers": [ + { + "host": "127.0.0.1", + "password": "", + "port": 3081, + "protocol": "http", + "url": "http://127.0.0.1:3081", + "user": "" + } + ] + } + } + config_dir = os.path.dirname(controller_config_path) + os.makedirs(config_dir, exist_ok=True) + with open(os.path.join(config_dir, "gns3_gui.conf"), "w+") as f: + json.dump(gns3_gui_conf, f) + + async_run(controller.load()) + assert len(controller.computes) == 1 + compute = list(controller.computes.values())[0] + assert compute.host == "127.0.0.1" + assert compute.port == 3081 + assert compute.protocol == "http" + assert compute.name == "http://127.0.0.1:3081" + assert compute.user is None + assert compute.password is None + + def test_settings(controller): controller._notification = MagicMock() controller.settings = {"a": 1}