@@ -322,30 +322,39 @@ def add_update_interface(self, interface_object, device_object, interface_data,
322322 interface_object .update (data = interface_data , source = self )
323323
324324 if version .parse (self .inventory .netbox_api_version ) >= version .parse ("4.2.0" ) and \
325- interface_mac_address is not None :
326-
327- primary_mac_address_object = grab (interface_object , "data.primary_mac_address" )
325+ interface_mac_address is not None :
328326
329327 primary_mac_address_data = {
330328 "mac_address" : interface_mac_address ,
331329 "assigned_object_id" : interface_object ,
332330 "assigned_object_type" : interface_class
333331 }
334332
335- if (primary_mac_address_object is None or
336- grab (primary_mac_address_object , "data.mac_address" ) != interface_mac_address ):
333+ primary_mac_address_object = None
334+ # check for associated MAC addresses on existing interface
335+ if interface_object .is_new is False :
336+ current_primary_mac_address_object = grab (interface_object , "data.primary_mac_address" )
337+ if grab (current_primary_mac_address_object , "data.mac_address" ) == interface_mac_address :
338+ primary_mac_address_object = current_primary_mac_address_object
339+ for mac_address_object in interface_object .get_mac_addresses ():
340+ if (primary_mac_address_object is None and
341+ grab (mac_address_object , "data.mac_address" ) == interface_mac_address ):
342+ primary_mac_address_object = mac_address_object
343+ if mac_address_object is not primary_mac_address_object :
344+ mac_address_object .remove_interface_association ()
337345
338- primary_mac_address_object = None
346+ # if a new interface or not matching assigned MAC address, try to find an existing unassigned mac address
347+ if primary_mac_address_object is None :
339348 for mac_address_object in self .inventory .get_all_items (NBMACAddress ):
340349 if (grab (mac_address_object , "data.mac_address" ) == interface_mac_address and
341350 grab (mac_address_object , "data.assigned_object_id" ) is None ):
342351 primary_mac_address_object = mac_address_object
343352 break
344353
345- if primary_mac_address_object is None :
346- primary_mac_address_object = self . inventory . add_object ( NBMACAddress , data = primary_mac_address_data , source = self )
347- else :
348- primary_mac_address_object . update ( data = primary_mac_address_data , source = self )
354+ # of no existing mac address could be found, create a new one
355+ if primary_mac_address_object is None :
356+ primary_mac_address_object = self . inventory . add_object ( NBMACAddress , data = primary_mac_address_data ,
357+ source = self )
349358 else :
350359 primary_mac_address_object .update (data = primary_mac_address_data , source = self )
351360
0 commit comments