1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Add 'available_on' VLAN filters for devices & VMs

This commit is contained in:
Jeremy Stretch
2021-03-30 21:32:48 -04:00
parent e1e840eb69
commit b91e5763e2
5 changed files with 134 additions and 100 deletions

View File

@ -606,20 +606,12 @@ class VMInterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm)
untagged_vlan = DynamicModelChoiceField(
queryset=VLAN.objects.all(),
required=False,
label='Untagged VLAN',
brief_mode=False,
query_params={
'site_id': 'null',
}
label='Untagged VLAN'
)
tagged_vlans = DynamicModelMultipleChoiceField(
queryset=VLAN.objects.all(),
required=False,
label='Tagged VLANs',
brief_mode=False,
query_params={
'site_id': 'null',
}
label='Tagged VLANs'
)
tags = DynamicModelMultipleChoiceField(
queryset=Tag.objects.all(),
@ -646,15 +638,10 @@ class VMInterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
virtual_machine = VirtualMachine.objects.get(
pk=self.initial.get('virtual_machine') or self.data.get('virtual_machine')
)
# Add current site to VLANs query params
site = virtual_machine.site
if site:
self.fields['untagged_vlan'].widget.add_query_param('site_id', site.pk)
self.fields['tagged_vlans'].widget.add_query_param('site_id', site.pk)
# 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)
class VMInterfaceCreateForm(BootstrapMixin, InterfaceCommonForm):
@ -689,19 +676,11 @@ class VMInterfaceCreateForm(BootstrapMixin, InterfaceCommonForm):
)
untagged_vlan = DynamicModelChoiceField(
queryset=VLAN.objects.all(),
required=False,
brief_mode=False,
query_params={
'site_id': 'null',
}
required=False
)
tagged_vlans = DynamicModelMultipleChoiceField(
queryset=VLAN.objects.all(),
required=False,
brief_mode=False,
query_params={
'site_id': 'null',
}
required=False
)
tags = DynamicModelMultipleChoiceField(
queryset=Tag.objects.all(),
@ -711,15 +690,10 @@ class VMInterfaceCreateForm(BootstrapMixin, InterfaceCommonForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
virtual_machine = VirtualMachine.objects.get(
pk=self.initial.get('virtual_machine') or self.data.get('virtual_machine')
)
# Add current site to VLANs query params
site = virtual_machine.site
if site:
self.fields['untagged_vlan'].widget.add_query_param('site_id', site.pk)
self.fields['tagged_vlans'].widget.add_query_param('site_id', site.pk)
# 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)
class VMInterfaceCSVForm(CSVModelForm):
@ -777,19 +751,11 @@ class VMInterfaceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
)
untagged_vlan = DynamicModelChoiceField(
queryset=VLAN.objects.all(),
required=False,
brief_mode=False,
query_params={
'site_id': 'null',
}
required=False
)
tagged_vlans = DynamicModelMultipleChoiceField(
queryset=VLAN.objects.all(),
required=False,
brief_mode=False,
query_params={
'site_id': 'null',
}
required=False
)
class Meta:
@ -800,15 +766,10 @@ class VMInterfaceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Limit available VLANs based on the parent VirtualMachine
if 'virtual_machine' in self.initial:
parent_obj = VirtualMachine.objects.filter(pk=self.initial['virtual_machine']).first()
site = getattr(parent_obj.cluster, 'site', None)
if site is not None:
# 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)
# 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)
class VMInterfaceBulkRenameForm(BulkRenameForm):