From f4862e5fc245288c1a6a35f2a86ed88188150231 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Thu, 10 Oct 2024 17:30:10 -0400 Subject: [PATCH] Remake migrations --- netbox/dcim/filtersets.py | 13 ++++++++- ...0194_interface_vlan_translation_policy.py} | 4 +-- netbox/dcim/tests/test_filtersets.py | 28 +++++++++++++++---- ...antranslationpolicy_vlantranslationrule.py | 2 +- netbox/package-lock.json | 6 ++++ netbox/virtualization/filtersets.py | 12 ++++++++ ...041_vminterface_vlan_translation_policy.py | 20 ------------- .../virtualization/tests/test_filtersets.py | 22 +++++++++++++-- 8 files changed, 75 insertions(+), 32 deletions(-) rename netbox/dcim/migrations/{0192_interface_vlan_translation_policy.py => 0194_interface_vlan_translation_policy.py} (84%) create mode 100644 netbox/package-lock.json delete mode 100644 netbox/virtualization/migrations/0041_vminterface_vlan_translation_policy.py diff --git a/netbox/dcim/filtersets.py b/netbox/dcim/filtersets.py index 04ac3a3d2..b076dd242 100644 --- a/netbox/dcim/filtersets.py +++ b/netbox/dcim/filtersets.py @@ -8,7 +8,7 @@ from circuits.models import CircuitTermination from extras.filtersets import LocalConfigContextFilterSet from extras.models import ConfigTemplate from ipam.filtersets import PrimaryIPFilterSet -from ipam.models import ASN, IPAddress, VRF +from ipam.models import ASN, IPAddress, VRF, VLANTranslationPolicy from netbox.choices import ColorChoices from netbox.filtersets import ( BaseFilterSet, ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, NetBoxModelFilterSet, @@ -1733,6 +1733,17 @@ class InterfaceFilterSet( queryset=WirelessLink.objects.all(), label=_('Wireless link') ) + vlan_translation_policy_id = django_filters.ModelMultipleChoiceFilter( + field_name='vlan_translation_policy', + queryset=VLANTranslationPolicy.objects.all(), + label=_('VLAN Translation Policy (ID)'), + ) + vlan_translation_policy_name = django_filters.ModelMultipleChoiceFilter( + field_name='vlan_translation_policy__name', + queryset=VLANTranslationPolicy.objects.all(), + to_field_name='name', + label=_('VLAN Translation Policy (name)'), + ) class Meta: model = Interface diff --git a/netbox/dcim/migrations/0192_interface_vlan_translation_policy.py b/netbox/dcim/migrations/0194_interface_vlan_translation_policy.py similarity index 84% rename from netbox/dcim/migrations/0192_interface_vlan_translation_policy.py rename to netbox/dcim/migrations/0194_interface_vlan_translation_policy.py index 563284fb5..bfbfa547b 100644 --- a/netbox/dcim/migrations/0192_interface_vlan_translation_policy.py +++ b/netbox/dcim/migrations/0194_interface_vlan_translation_policy.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.9 on 2024-10-09 15:20 +# Generated by Django 5.0.9 on 2024-10-11 19:45 import django.db.models.deletion from django.db import migrations, models @@ -7,7 +7,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('dcim', '0191_module_bay_rebuild'), + ('dcim', '0193_poweroutlet_color'), ('ipam', '0071_vlantranslationpolicy_vlantranslationrule'), ] diff --git a/netbox/dcim/tests/test_filtersets.py b/netbox/dcim/tests/test_filtersets.py index ae738b57f..512efa93f 100644 --- a/netbox/dcim/tests/test_filtersets.py +++ b/netbox/dcim/tests/test_filtersets.py @@ -4,7 +4,7 @@ from circuits.models import Circuit, CircuitTermination, CircuitType, Provider from dcim.choices import * from dcim.filtersets import * from dcim.models import * -from ipam.models import ASN, IPAddress, RIR, VRF +from ipam.models import ASN, IPAddress, RIR, VRF, VLANTranslationPolicy from netbox.choices import ColorChoices, WeightUnitChoices from tenancy.models import Tenant, TenantGroup from users.models import User @@ -3670,6 +3670,13 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil ) VirtualDeviceContext.objects.bulk_create(vdcs) + vlan_translation_policies = ( + VLANTranslationPolicy(name='Policy 1'), + VLANTranslationPolicy(name='Policy 2'), + VLANTranslationPolicy(name='Policy 3'), + ) + VLANTranslationPolicy.objects.bulk_create(vlan_translation_policies) + interfaces = ( Interface( device=devices[0], @@ -3687,7 +3694,8 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil speed=1000000, duplex='half', poe_mode=InterfacePoEModeChoices.MODE_PSE, - poe_type=InterfacePoETypeChoices.TYPE_1_8023AF + poe_type=InterfacePoETypeChoices.TYPE_1_8023AF, + vlan_translation_policy=vlan_translation_policies[0], ), Interface( device=devices[1], @@ -3712,7 +3720,8 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil speed=1000000, duplex='full', poe_mode=InterfacePoEModeChoices.MODE_PD, - poe_type=InterfacePoETypeChoices.TYPE_1_8023AF + poe_type=InterfacePoETypeChoices.TYPE_1_8023AF, + vlan_translation_policy=vlan_translation_policies[0], ), Interface( device=devices[3], @@ -3730,7 +3739,8 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil speed=100000, duplex='half', poe_mode=InterfacePoEModeChoices.MODE_PSE, - poe_type=InterfacePoETypeChoices.TYPE_2_8023AT + poe_type=InterfacePoETypeChoices.TYPE_2_8023AT, + vlan_translation_policy=vlan_translation_policies[1], ), Interface( device=devices[4], @@ -3743,7 +3753,8 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil speed=100000, duplex='full', poe_mode=InterfacePoEModeChoices.MODE_PD, - poe_type=InterfacePoETypeChoices.TYPE_2_8023AT + poe_type=InterfacePoETypeChoices.TYPE_2_8023AT, + vlan_translation_policy=vlan_translation_policies[1], ), Interface( device=devices[4], @@ -4017,6 +4028,13 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil params = {'vdc_identifier': vdc.values_list('identifier', flat=True)} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) + def test_vlan_translation_policy(self): + vlan_translation_policies = VLANTranslationPolicy.objects.all()[:2] + params = {'vlan_translation_policy_id': [vlan_translation_policies[0].pk, vlan_translation_policies[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + params = {'vlan_translation_policy_name': [vlan_translation_policies[0].name, vlan_translation_policies[1].name]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + class FrontPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFilterSetTests): queryset = FrontPort.objects.all() diff --git a/netbox/ipam/migrations/0071_vlantranslationpolicy_vlantranslationrule.py b/netbox/ipam/migrations/0071_vlantranslationpolicy_vlantranslationrule.py index 5f33e5bfd..aa3ed137d 100644 --- a/netbox/ipam/migrations/0071_vlantranslationpolicy_vlantranslationrule.py +++ b/netbox/ipam/migrations/0071_vlantranslationpolicy_vlantranslationrule.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.9 on 2024-10-09 15:20 +# Generated by Django 5.0.9 on 2024-10-11 19:45 import django.db.models.deletion import taggit.managers diff --git a/netbox/package-lock.json b/netbox/package-lock.json new file mode 100644 index 000000000..e1a0fec24 --- /dev/null +++ b/netbox/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "netbox", + "lockfileVersion": 2, + "requires": true, + "packages": {} +} diff --git a/netbox/virtualization/filtersets.py b/netbox/virtualization/filtersets.py index ec0831f9f..9f3fff3f1 100644 --- a/netbox/virtualization/filtersets.py +++ b/netbox/virtualization/filtersets.py @@ -7,6 +7,7 @@ from dcim.models import Device, DeviceRole, Platform, Region, Site, SiteGroup from extras.filtersets import LocalConfigContextFilterSet from extras.models import ConfigTemplate from ipam.filtersets import PrimaryIPFilterSet +from ipam.models import VLANTranslationPolicy from netbox.filtersets import OrganizationalModelFilterSet, NetBoxModelFilterSet from tenancy.filtersets import TenancyFilterSet, ContactModelFilterSet from utilities.filters import MultiValueCharFilter, MultiValueMACAddressFilter, TreeNodeMultipleChoiceFilter @@ -300,6 +301,17 @@ class VMInterfaceFilterSet(NetBoxModelFilterSet, CommonInterfaceFilterSet): mac_address = MultiValueMACAddressFilter( label=_('MAC address'), ) + vlan_translation_policy_id = django_filters.ModelMultipleChoiceFilter( + field_name='vlan_translation_policy', + queryset=VLANTranslationPolicy.objects.all(), + label=_('VLAN Translation Policy (ID)'), + ) + vlan_translation_policy_name = django_filters.ModelMultipleChoiceFilter( + field_name='vlan_translation_policy__name', + queryset=VLANTranslationPolicy.objects.all(), + to_field_name='name', + label=_('VLAN Translation Policy (name)'), + ) class Meta: model = VMInterface diff --git a/netbox/virtualization/migrations/0041_vminterface_vlan_translation_policy.py b/netbox/virtualization/migrations/0041_vminterface_vlan_translation_policy.py deleted file mode 100644 index 9fde2ab50..000000000 --- a/netbox/virtualization/migrations/0041_vminterface_vlan_translation_policy.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 5.0.9 on 2024-10-09 15:20 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ipam', '0071_vlantranslationpolicy_vlantranslationrule'), - ('virtualization', '0040_convert_disk_size'), - ] - - operations = [ - migrations.AddField( - model_name='vminterface', - name='vlan_translation_policy', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ipam.vlantranslationpolicy'), - ), - ] diff --git a/netbox/virtualization/tests/test_filtersets.py b/netbox/virtualization/tests/test_filtersets.py index d2e6cc05f..6f0fdfa0a 100644 --- a/netbox/virtualization/tests/test_filtersets.py +++ b/netbox/virtualization/tests/test_filtersets.py @@ -1,7 +1,7 @@ from django.test import TestCase from dcim.models import Device, DeviceRole, Platform, Region, Site, SiteGroup -from ipam.models import IPAddress, VRF +from ipam.models import IPAddress, VRF, VLANTranslationPolicy from tenancy.models import Tenant, TenantGroup from utilities.testing import ChangeLoggedFilterSetTests, create_test_device from virtualization.choices import * @@ -561,6 +561,13 @@ class VMInterfaceTestCase(TestCase, ChangeLoggedFilterSetTests): ) VirtualMachine.objects.bulk_create(vms) + vlan_translation_policies = ( + VLANTranslationPolicy(name='Policy 1'), + VLANTranslationPolicy(name='Policy 2'), + VLANTranslationPolicy(name='Policy 3'), + ) + VLANTranslationPolicy.objects.bulk_create(vlan_translation_policies) + interfaces = ( VMInterface( virtual_machine=vms[0], @@ -569,7 +576,8 @@ class VMInterfaceTestCase(TestCase, ChangeLoggedFilterSetTests): mtu=100, mac_address='00-00-00-00-00-01', vrf=vrfs[0], - description='foobar1' + description='foobar1', + vlan_translation_policy=vlan_translation_policies[0], ), VMInterface( virtual_machine=vms[1], @@ -578,7 +586,8 @@ class VMInterfaceTestCase(TestCase, ChangeLoggedFilterSetTests): mtu=200, mac_address='00-00-00-00-00-02', vrf=vrfs[1], - description='foobar2' + description='foobar2', + vlan_translation_policy=vlan_translation_policies[0], ), VMInterface( virtual_machine=vms[2], @@ -658,6 +667,13 @@ class VMInterfaceTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'description': ['foobar1', 'foobar2']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_vlan_translation_policy(self): + vlan_translation_policies = VLANTranslationPolicy.objects.all()[:2] + params = {'vlan_translation_policy_id': [vlan_translation_policies[0].pk, vlan_translation_policies[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'vlan_translation_policy_name': [vlan_translation_policies[0].name, vlan_translation_policies[1].name]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + class VirtualDiskTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = VirtualDisk.objects.all()