diff --git a/gns3server/controller/__init__.py b/gns3server/controller/__init__.py index e6cf25c1..8a5d999d 100644 --- a/gns3server/controller/__init__.py +++ b/gns3server/controller/__init__.py @@ -78,10 +78,11 @@ class Controller: try: with open(path, 'r', encoding='utf-8') as f: appliance = ApplianceTemplate(appliance_id, json.load(f), builtin=builtin) - except (ValueError, OSError) as e: + appliance.__json__() # Check if loaded without error + if appliance.status != 'broken': + self._appliance_templates[appliance.id] = appliance + except (ValueError, OSError, KeyError) as e: log.warning("Can't load %s: %s", path, str(e)) - if appliance.status != 'broken': - self._appliance_templates[appliance.id] = appliance self._appliances = {} vms = [] diff --git a/tests/controller/test_controller.py b/tests/controller/test_controller.py index 5c7240ff..e9b3f528 100644 --- a/tests/controller/test_controller.py +++ b/tests/controller/test_controller.py @@ -481,6 +481,12 @@ def test_appliance_templates(controller, async_run, tmpdir): } with open(str(tmpdir / "my_appliance.gns3a"), 'w+') as f: json.dump(my_appliance, f) + # A broken appliance + my_appliance = { + "name": "Broken" + } + with open(str(tmpdir / "my_appliance2.gns3a"), 'w+') as f: + json.dump(my_appliance, f) with patch("gns3server.config.Config.get_section_config", return_value={"appliances_path": str(tmpdir)}): controller.load_appliances()