From dd9f62158fbd2a8deca149380d12b5268e39a4fa Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 13 May 2015 15:53:58 -0600 Subject: [PATCH] Fixes bugs with IOS router configs. Fixes #354. --- .../handlers/api/dynamips_vm_handler.py | 38 ++++++++++--------- gns3server/modules/dynamips/__init__.py | 10 +++-- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/gns3server/handlers/api/dynamips_vm_handler.py b/gns3server/handlers/api/dynamips_vm_handler.py index 5b501815..cfb919ba 100644 --- a/gns3server/handlers/api/dynamips_vm_handler.py +++ b/gns3server/handlers/api/dynamips_vm_handler.py @@ -367,15 +367,16 @@ class DynamipsVMHandler: else: # nvram doesn't contain anything if the router has not been started at least once # in this case just use the startup-config file - startup_config_path = os.path.join(module_workdir, vm.startup_config) - if os.path.exists(startup_config_path): - try: - with open(startup_config_path, "rb") as f: - content = f.read().decode("utf-8", errors='replace') - if content: - result["startup_config_content"] = content - except OSError as e: - raise DynamipsError("Could not read the startup-config {}: {}".format(startup_config_path, e)) + if vm.startup_config: + startup_config_path = os.path.join(module_workdir, vm.startup_config) + if os.path.isfile(startup_config_path): + try: + with open(startup_config_path, "rb") as f: + content = f.read().decode("utf-8", errors='replace') + if content: + result["startup_config_content"] = content + except OSError as e: + raise DynamipsError("Could not read the startup-config {}: {}".format(startup_config_path, e)) if private_config_base64: private_config_content = base64.b64decode(private_config_base64).decode("utf-8", errors='replace') @@ -383,15 +384,16 @@ class DynamipsVMHandler: else: # nvram doesn't contain anything if the router has not been started at least once # in this case just use the private-config file - private_config_path = os.path.join(module_workdir, vm.private_config) - if os.path.exists(private_config_path): - try: - with open(private_config_path, "rb") as f: - content = f.read().decode("utf-8", errors='replace') - if content: - result["private_config_content"] = content - except OSError as e: - raise DynamipsError("Could not read the private-config {}: {}".format(private_config_path, e)) + if vm.private_config: + private_config_path = os.path.join(module_workdir, vm.private_config) + if os.path.isfile(private_config_path): + try: + with open(private_config_path, "rb") as f: + content = f.read().decode("utf-8", errors='replace') + if content: + result["private_config_content"] = content + except OSError as e: + raise DynamipsError("Could not read the private-config {}: {}".format(private_config_path, e)) response.set_status(200) response.json(result) diff --git a/gns3server/modules/dynamips/__init__.py b/gns3server/modules/dynamips/__init__.py index 38aeac83..a8bb51e2 100644 --- a/gns3server/modules/dynamips/__init__.py +++ b/gns3server/modules/dynamips/__init__.py @@ -535,17 +535,19 @@ class Dynamips(BaseManager): default_private_config_path = os.path.join(module_workdir, "configs", "i{}_private-config.cfg".format(vm.dynamips_id)) startup_config_path = settings.get("startup_config") + startup_config_content = settings.get("startup_config_content") if startup_config_path: yield from vm.set_configs(startup_config_path) - else: - startup_config_path = self._create_config(vm, default_startup_config_path, settings.get("startup_config_content")) + elif startup_config_content: + startup_config_path = self._create_config(vm, default_startup_config_path, startup_config_content) yield from vm.set_configs(startup_config_path) private_config_path = settings.get("private_config") + private_config_content = settings.get("private_config_content") if private_config_path: yield from vm.set_configs(vm.startup_config, private_config_path) - else: - private_config_path = self._create_config(vm, default_private_config_path, settings.get("private_config_content")) + elif private_config_content: + private_config_path = self._create_config(vm, default_private_config_path, private_config_content) yield from vm.set_configs(vm.startup_config, private_config_path) def _create_config(self, vm, path, content=None):