From d21469a9168def31d13378ca762beb3a50f34223 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 6 May 2015 17:22:07 -0600 Subject: [PATCH] Return an error if an adapter slot doesn't exist on an IOS router. --- gns3server/modules/dynamips/__init__.py | 37 ++++++++++++++++--------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/gns3server/modules/dynamips/__init__.py b/gns3server/modules/dynamips/__init__.py index bd1b15220..38aeac83a 100644 --- a/gns3server/modules/dynamips/__init__.py +++ b/gns3server/modules/dynamips/__init__.py @@ -473,31 +473,42 @@ class Dynamips(BaseManager): if hasattr(vm, "set_{}".format(name)): setter = getattr(vm, "set_{}".format(name)) yield from setter(value) - elif name.startswith("slot") and value in ADAPTER_MATRIX: slot_id = int(name[-1]) adapter_name = value adapter = ADAPTER_MATRIX[adapter_name]() - if vm.slots[slot_id] and not isinstance(vm.slots[slot_id], type(adapter)): - yield from vm.slot_remove_binding(slot_id) - if not isinstance(vm.slots[slot_id], type(adapter)): - yield from vm.slot_add_binding(slot_id, adapter) + try: + if vm.slots[slot_id] and not isinstance(vm.slots[slot_id], type(adapter)): + yield from vm.slot_remove_binding(slot_id) + if not isinstance(vm.slots[slot_id], type(adapter)): + yield from vm.slot_add_binding(slot_id, adapter) + except IndexError: + raise DynamipsError("Slot {} doesn't exist on this router".format(slot_id)) elif name.startswith("slot") and value is None: slot_id = int(name[-1]) - if vm.slots[slot_id]: - yield from vm.slot_remove_binding(slot_id) + try: + if vm.slots[slot_id]: + yield from vm.slot_remove_binding(slot_id) + except IndexError: + raise DynamipsError("Slot {} doesn't exist on this router".format(slot_id)) elif name.startswith("wic") and value in WIC_MATRIX: wic_slot_id = int(name[-1]) wic_name = value wic = WIC_MATRIX[wic_name]() - if vm.slots[0].wics[wic_slot_id] and not isinstance(vm.slots[0].wics[wic_slot_id], type(wic)): - yield from vm.uninstall_wic(wic_slot_id) - if not isinstance(vm.slots[0].wics[wic_slot_id], type(wic)): - yield from vm.install_wic(wic_slot_id, wic) + try: + if vm.slots[0].wics[wic_slot_id] and not isinstance(vm.slots[0].wics[wic_slot_id], type(wic)): + yield from vm.uninstall_wic(wic_slot_id) + if not isinstance(vm.slots[0].wics[wic_slot_id], type(wic)): + yield from vm.install_wic(wic_slot_id, wic) + except IndexError: + raise DynamipsError("WIC slot {} doesn't exist on this router".format(wic_slot_id)) elif name.startswith("wic") and value is None: wic_slot_id = int(name[-1]) - if vm.slots[0].wics and vm.slots[0].wics[wic_slot_id]: - yield from vm.uninstall_wic(wic_slot_id) + try: + if vm.slots[0].wics and vm.slots[0].wics[wic_slot_id]: + yield from vm.uninstall_wic(wic_slot_id) + except IndexError: + raise DynamipsError("WIC slot {} doesn't exist on this router".format(wic_slot_id)) mmap_support = self.config.get_section_config("Dynamips").getboolean("mmap_support", True) if mmap_support is False: