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. 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..081b40bb 100644 --- a/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py +++ b/nautobot_device_onboarding/diffsync/adapters/sync_network_data_adapters.py @@ -602,26 +602,28 @@ def load_vlans(self): model_type="vlan", ) continue - # check for untagged vlan and add if necessary - if interface_data["untagged_vlan"]: - 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 + # check for untagged vlan and add if necessary, skip VLAN 0 + 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,6 +713,9 @@ 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"] 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, @@ -718,6 +723,7 @@ def load_untagged_vlan_to_interface(self): 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,