Pārlūkot izejas kodu

Fixes #5643: Fix VLAN assignment when editing VM interfaces in bulk

jeremystretch 4 gadi atpakaļ
vecāks
revīzija
f67369a9a9
2 mainītis faili ar 21 papildinājumiem un 0 dzēšanām
  1. 1 0
      docs/release-notes/version-2.10.md
  2. 20 0
      netbox/virtualization/forms.py

+ 1 - 0
docs/release-notes/version-2.10.md

@@ -12,6 +12,7 @@
 ### Bug Fixes
 
 * [#5419](https://github.com/netbox-community/netbox/issues/5419) - Update parent device/VM when deleting a primary IP
+* [#5643](https://github.com/netbox-community/netbox/issues/5643) - Fix VLAN assignment when editing VM interfaces in bulk
 * [#5652](https://github.com/netbox-community/netbox/issues/5652) - Update object data when renaming a custom field
 * [#6056](https://github.com/netbox-community/netbox/issues/6056) - Optimize change log cleanup
 * [#6144](https://github.com/netbox-community/netbox/issues/6144) - Fix MAC address field display in VM interfaces search form

+ 20 - 0
netbox/virtualization/forms.py

@@ -756,6 +756,26 @@ class VMInterfaceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
                 # Add current site to VLANs query params
                 self.fields['untagged_vlan'].widget.add_query_param('site_id', site.pk)
                 self.fields['tagged_vlans'].widget.add_query_param('site_id', site.pk)
+        else:
+            # See 5643
+            if 'pk' in self.initial:
+                site = None
+                interfaces = VMInterface.objects.filter(pk__in=self.initial['pk']).prefetch_related(
+                    'virtual_machine__cluster__site'
+                )
+
+                # Check interface sites.  First interface should set site, further interfaces will either continue the
+                # loop or reset back to no site and break the loop.
+                for interface in interfaces:
+                    if site is None:
+                        site = interface.virtual_machine.cluster.site
+                    elif interface.virtual_machine.cluster.site is not site:
+                        site = None
+                        break
+
+                if site is not None:
+                    self.fields['untagged_vlan'].widget.add_query_param('site_id', site.pk)
+                    self.fields['tagged_vlans'].widget.add_query_param('site_id', site.pk)
 
 
 class VMInterfaceBulkRenameForm(BulkRenameForm):