From 3260ae76f1244b1e7a6dd8beae928b6e8f3539a3 Mon Sep 17 00:00:00 2001 From: kkthxbye-code Date: Sat, 4 Mar 2023 23:42:28 +0100 Subject: [PATCH] Move update_interface_bridges to a utility function --- netbox/dcim/models/devices.py | 36 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index 6a74065f1..de6d1bc83 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -460,6 +460,20 @@ class Platform(OrganizationalModel): 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, @@ -802,15 +816,6 @@ class Device(PrimaryModel, ConfigContextModel): '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. @@ -864,7 +869,7 @@ class Device(PrimaryModel, ConfigContextModel): # 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) @@ -1026,15 +1031,6 @@ class Module(PrimaryModel, ConfigContextModel): 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 @@ -1111,7 +1107,7 @@ class Module(PrimaryModel, ConfigContextModel): ) # 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) #