From 6e765e3eb15e3904e84f6291e31b292f02d91892 Mon Sep 17 00:00:00 2001 From: scetron Date: Fri, 13 Dec 2024 12:09:55 -0500 Subject: [PATCH 1/3] Do not add VID 0 to diffsync store --- .../adapters/sync_network_data_adapters.py | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py b/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py index 96a189d3..2952a654 100644 --- a/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py +++ b/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py @@ -602,8 +602,8 @@ def load_vlans(self): model_type="vlan", ) continue - # check for untagged vlan and add if necessary - if interface_data["untagged_vlan"]: + # check for untagged vlan and add if necessary, skip VLAN 0 + if interface_data["untagged_vlan"] and interface_data["untagged_vlan"]["id"] != "0": try: network_vlan = self.vlan( adapter=self, @@ -711,13 +711,16 @@ def load_untagged_vlan_to_interface(self): # for interface in device_data["interfaces"]: for interface_name, interface_data in device_data["interfaces"].items(): try: - network_untagged_vlan_to_interface = self.untagged_vlan_to_interface( - adapter=self, - device__name=hostname, - name=interface_name, - untagged_vlan=interface_data["untagged_vlan"], - ) - self.add(network_untagged_vlan_to_interface) + if interface_data["untagged_vlan"]["id"] != "0": + network_untagged_vlan_to_interface = self.untagged_vlan_to_interface( + adapter=self, + device__name=hostname, + name=interface_name, + untagged_vlan=interface_data["untagged_vlan"], + ) + self.add(network_untagged_vlan_to_interface) + else: + continue except Exception as err: # pylint: disable=broad-exception-caught self._handle_general_load_exception( error=err, From ab464619d263e3ba0f3f8d47309706fe0d22c140 Mon Sep 17 00:00:00 2001 From: scetron Date: Fri, 13 Dec 2024 14:44:31 -0500 Subject: [PATCH 2/3] add snippet --- changes/283.fixed | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/283.fixed diff --git a/changes/283.fixed b/changes/283.fixed new file mode 100644 index 00000000..f95060de --- /dev/null +++ b/changes/283.fixed @@ -0,0 +1 @@ +- Fixed adding invalid VLAN 0 to Diffsync Store causing Sync Data job to fail. From 5ab2f27d7671fa9931f483809c8d9f72e83f8132 Mon Sep 17 00:00:00 2001 From: scetron Date: Fri, 13 Dec 2024 17:26:01 -0500 Subject: [PATCH 3/3] adjust to only not add when id of 0, rather than blank --- .../adapters/sync_network_data_adapters.py | 59 ++++++++++--------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py b/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py index 2952a654..081b40bb 100644 --- a/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py +++ b/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py @@ -603,25 +603,27 @@ def load_vlans(self): ) continue # check for untagged vlan and add if necessary, skip VLAN 0 - if interface_data["untagged_vlan"] and interface_data["untagged_vlan"]["id"] != "0": - try: - network_vlan = self.vlan( - adapter=self, - name=interface_data["untagged_vlan"]["name"], - vid=interface_data["untagged_vlan"]["id"], - location__name=location_names.get(hostname, ""), - ) - self.add(network_vlan) - except diffsync.exceptions.ObjectAlreadyExists: - continue - except Exception as err: # pylint: disable=broad-exception-caught - self._handle_general_load_exception( - error=err, - hostname=hostname, - data=device_data, - model_type="vlan", - ) - continue + if interface_data["untagged_vlan"] and interface_data["untagged_vlan"].get("id") == "0": + self.job.logger.warning("Interface with untagged vlan 0 found. Skipping untagged vlan load.") + continue + try: + network_vlan = self.vlan( + adapter=self, + name=interface_data["untagged_vlan"]["name"], + vid=interface_data["untagged_vlan"]["id"], + location__name=location_names.get(hostname, ""), + ) + self.add(network_vlan) + except diffsync.exceptions.ObjectAlreadyExists: + continue + except Exception as err: # pylint: disable=broad-exception-caught + self._handle_general_load_exception( + error=err, + hostname=hostname, + data=device_data, + model_type="vlan", + ) + continue def load_vrfs(self): """Load vrfs into the Diffsync store.""" @@ -711,16 +713,17 @@ def load_untagged_vlan_to_interface(self): # for interface in device_data["interfaces"]: for interface_name, interface_data in device_data["interfaces"].items(): try: - if interface_data["untagged_vlan"]["id"] != "0": - network_untagged_vlan_to_interface = self.untagged_vlan_to_interface( - adapter=self, - device__name=hostname, - name=interface_name, - untagged_vlan=interface_data["untagged_vlan"], - ) - self.add(network_untagged_vlan_to_interface) - else: + if interface_data["untagged_vlan"] and interface_data["untagged_vlan"].get("id") == "0": + self.job.logger.warning("Interface with untagged vlan 0 found. Skipping untagged vlan load.") continue + network_untagged_vlan_to_interface = self.untagged_vlan_to_interface( + adapter=self, + device__name=hostname, + name=interface_name, + untagged_vlan=interface_data["untagged_vlan"], + ) + self.add(network_untagged_vlan_to_interface) + except Exception as err: # pylint: disable=broad-exception-caught self._handle_general_load_exception( error=err,