fixes issue with properly assigned MAC addresses

This commit is contained in:
Ricardo Bartels
2025-03-04 00:17:56 +01:00
parent 4a610952f5
commit ae5246f6e7
2 changed files with 40 additions and 12 deletions
+21 -2
View File
@@ -1454,6 +1454,7 @@ class NBSite(NetBoxObject):
}
super().__init__(*args, **kwargs)
class NBSiteGroup(NetBoxObject):
name = "site group"
api_path = "dcim/site-groups"
@@ -1995,11 +1996,20 @@ class NBVMInterface(NetBoxObject):
result_list = list()
for ip_object in self.inventory.get_all_items(NBIPAddress):
if grab(ip_object, "data.assigned_object_id") == self:
if ip_object.data.get("assigned_object_id") == self:
result_list.append(ip_object)
return result_list
def get_mac_addresses(self):
result_list = list()
for mac_object in self.inventory.get_all_items(NBMACAddress):
if mac_object.data.get("assigned_object_id") == self:
result_list.append(mac_object)
return result_list
class NBInterface(NetBoxObject):
name = "interface"
@@ -2038,11 +2048,20 @@ class NBInterface(NetBoxObject):
result_list = list()
for ip_object in self.inventory.get_all_items(NBIPAddress):
if grab(ip_object, "data.assigned_object_id") == self:
if ip_object.data.get("assigned_object_id") == self:
result_list.append(ip_object)
return result_list
def get_mac_addresses(self):
result_list = list()
for mac_object in self.inventory.get_all_items(NBMACAddress):
if mac_object.data.get("assigned_object_id") == self:
result_list.append(mac_object)
return result_list
def update(self, data=None, read_from_netbox=False, source=None):
# remove definition of interface type if a parent interface is set as it only supports virtual types
+19 -10
View File
@@ -322,9 +322,7 @@ class SourceBase:
interface_object.update(data=interface_data, source=self)
if version.parse(self.inventory.netbox_api_version) >= version.parse("4.2.0") and \
interface_mac_address is not None :
primary_mac_address_object = grab(interface_object, "data.primary_mac_address")
interface_mac_address is not None:
primary_mac_address_data = {
"mac_address": interface_mac_address,
@@ -332,20 +330,31 @@ class SourceBase:
"assigned_object_type": interface_class
}
if (primary_mac_address_object is None or
grab(primary_mac_address_object, "data.mac_address") != interface_mac_address):
primary_mac_address_object = None
# check for associated MAC addresses on existing interface
if interface_object.is_new is False:
current_primary_mac_address_object = grab(interface_object, "data.primary_mac_address")
if grab(current_primary_mac_address_object, "data.mac_address") == interface_mac_address:
primary_mac_address_object = current_primary_mac_address_object
for mac_address_object in interface_object.get_mac_addresses():
if (primary_mac_address_object is None and
grab(mac_address_object, "data.mac_address") == interface_mac_address):
primary_mac_address_object = mac_address_object
if mac_address_object is not primary_mac_address_object:
mac_address_object.remove_interface_association()
primary_mac_address_object = None
# if a new interface or not matching assigned MAC address, try to find an existing unassigned mac address
if primary_mac_address_object is None:
for mac_address_object in self.inventory.get_all_items(NBMACAddress):
if (grab(mac_address_object, "data.mac_address") == interface_mac_address and
grab(mac_address_object, "data.assigned_object_id") is None):
primary_mac_address_object = mac_address_object
break
if primary_mac_address_object is None:
primary_mac_address_object = self.inventory.add_object(NBMACAddress, data=primary_mac_address_data, source=self)
else:
primary_mac_address_object.update(data=primary_mac_address_data, source=self)
# of no existing mac address could be found, create a new one
if primary_mac_address_object is None:
primary_mac_address_object = self.inventory.add_object(NBMACAddress, data=primary_mac_address_data,
source=self)
else:
primary_mac_address_object.update(data=primary_mac_address_data, source=self)