mirror of
https://github.com/bb-Ricardo/netbox-sync.git
synced 2026-05-03 07:49:16 -05:00
fixes issue with properly assigned MAC addresses
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user