Skip to content

Commit

Permalink
Move update_interface_bridges to a utility function
Browse files Browse the repository at this point in the history
  • Loading branch information
kkthxbye-code authored and jeremystretch committed Mar 7, 2023
1 parent a74ae46 commit 3260ae7
Showing 1 changed file with 16 additions and 20 deletions.
36 changes: 16 additions & 20 deletions netbox/dcim/models/devices.py
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,20 @@ def get_absolute_url(self):
return reverse('dcim:platform', args=[self.pk])


def update_interface_bridges(device, interface_templates, module=None):
"""
Used for device and module instantiation. Iterates all InterfaceTemplates with a bridge assigned
and applies it to the actual interfaces.
"""
for interface_template in interface_templates.exclude(bridge=None):
interface = Interface.objects.get(device=device, name=interface_template.resolve_name(module=module))

if interface_template.bridge:
interface.bridge = Interface.objects.get(device=device, name=interface_template.bridge.resolve_name(module=module))
interface.full_clean()
interface.save()


class Device(PrimaryModel, ConfigContextModel):
"""
A Device represents a piece of physical hardware mounted within a Rack. Each Device is assigned a DeviceType,
Expand Down Expand Up @@ -802,15 +816,6 @@ def clean(self):
'vc_position': "A device assigned to a virtual chassis must have its position defined."
})

def _update_interface_bridges(self, interface_templates, module=None):
for interface_template in interface_templates.exclude(bridge=None):
interface = Interface.objects.get(device=self, name=interface_template.resolve_name(module=module))

if interface_template.bridge:
interface.bridge = Interface.objects.get(device=self, name=interface_template.bridge.resolve_name(module=module))
interface.full_clean()
interface.save()

def _instantiate_components(self, queryset, bulk_create=True):
"""
Instantiate components for the device from the specified component templates.
Expand Down Expand Up @@ -864,7 +869,7 @@ def save(self, *args, **kwargs):
# Disable bulk_create to accommodate MPTT
self._instantiate_components(self.device_type.inventoryitemtemplates.all(), bulk_create=False)
# Interface bridges have to be set after interface instantiation
self._update_interface_bridges(self.device_type.interfacetemplates.all())
update_interface_bridges(self, self.device_type.interfacetemplates.all())

# Update Site and Rack assignment for any child Devices
devices = Device.objects.filter(parent_bay__device=self)
Expand Down Expand Up @@ -1026,15 +1031,6 @@ def clean(self):
f"Module must be installed within a module bay belonging to the assigned device ({self.device})."
)

def _update_interface_bridges(self, interface_templates, module=None):
for interface_template in interface_templates.exclude(bridge=None):
interface = Interface.objects.get(device=self.device, name=interface_template.resolve_name(module=module))

if interface_template.bridge:
interface.bridge = Interface.objects.get(device=self.device, name=interface_template.bridge.resolve_name(module=module))
interface.full_clean()
interface.save()

def save(self, *args, **kwargs):
is_new = self.pk is None

Expand Down Expand Up @@ -1111,7 +1107,7 @@ def save(self, *args, **kwargs):
)

# Interface bridges have to be set after interface instantiation
self._update_interface_bridges(self.module_type.interfacetemplates, self)
update_interface_bridges(self.device, self.module_type.interfacetemplates, self)


#
Expand Down

0 comments on commit 3260ae7

Please sign in to comment.