From d33d9522ccabe029c3758c442a4fa05601969825 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 30 Mar 2021 21:46:56 -0400 Subject: [PATCH] Fix VM VLAN filtering --- netbox/ipam/querysets.py | 12 +++++++++--- netbox/virtualization/forms.py | 12 ++++++------ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/netbox/ipam/querysets.py b/netbox/ipam/querysets.py index a205dca32..1a723421d 100644 --- a/netbox/ipam/querysets.py +++ b/netbox/ipam/querysets.py @@ -60,6 +60,7 @@ class VLANQuerySet(RestrictedQuerySet): scope_id=device.rack_id ) + # Return all applicable VLANs return self.filter( Q(group__in=VLANGroup.objects.filter(q)) | Q(site=device.site) | @@ -98,9 +99,14 @@ class VLANQuerySet(RestrictedQuerySet): scope_type=ContentType.objects.get_by_natural_key('virtualization', 'cluster'), scope_id=vm.cluster_id ) + vlan_groups = VLANGroup.objects.filter(q) - return self.filter( - Q(group__in=VLANGroup.objects.filter(q)) | - Q(site=vm.cluster.site) | + # Return all applicable VLANs + q = ( + Q(group__in=vlan_groups) | Q(group__isnull=True, site__isnull=True) # Global VLANs ) + if vm.cluster.site: + q |= Q(site=vm.cluster.site) + + return self.filter(q) diff --git a/netbox/virtualization/forms.py b/netbox/virtualization/forms.py index 4764e9a8e..2b39e75d3 100644 --- a/netbox/virtualization/forms.py +++ b/netbox/virtualization/forms.py @@ -640,8 +640,8 @@ class VMInterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm) # Limit VLAN choices by virtual machine vm_id = self.initial.get('virtual_machine') or self.data.get('virtual_machine') - self.fields['untagged_vlan'].widget.add_query_param('available_on_vm', vm_id) - self.fields['tagged_vlans'].widget.add_query_param('available_on_vm', vm_id) + self.fields['untagged_vlan'].widget.add_query_param('available_on_virtualmachine', vm_id) + self.fields['tagged_vlans'].widget.add_query_param('available_on_virtualmachine', vm_id) class VMInterfaceCreateForm(BootstrapMixin, InterfaceCommonForm): @@ -692,8 +692,8 @@ class VMInterfaceCreateForm(BootstrapMixin, InterfaceCommonForm): # Limit VLAN choices by virtual machine vm_id = self.initial.get('virtual_machine') or self.data.get('virtual_machine') - self.fields['untagged_vlan'].widget.add_query_param('available_on_vm', vm_id) - self.fields['tagged_vlans'].widget.add_query_param('available_on_vm', vm_id) + self.fields['untagged_vlan'].widget.add_query_param('available_on_virtualmachine', vm_id) + self.fields['tagged_vlans'].widget.add_query_param('available_on_virtualmachine', vm_id) class VMInterfaceCSVForm(CSVModelForm): @@ -768,8 +768,8 @@ class VMInterfaceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm): # Limit VLAN choices by virtual machine vm_id = self.initial.get('virtual_machine') or self.data.get('virtual_machine') - self.fields['untagged_vlan'].widget.add_query_param('available_on_vm', vm_id) - self.fields['tagged_vlans'].widget.add_query_param('available_on_vm', vm_id) + self.fields['untagged_vlan'].widget.add_query_param('available_on_virtualmachine', vm_id) + self.fields['tagged_vlans'].widget.add_query_param('available_on_virtualmachine', vm_id) class VMInterfaceBulkRenameForm(BulkRenameForm):