From c672b7a9fcd5d38d29d885a8332585d46192e25b Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 17 Nov 2023 14:16:39 -0500 Subject: [PATCH] Misc cleanup --- netbox/virtualization/filtersets.py | 3 +- netbox/virtualization/forms/model_forms.py | 39 +++++++-------- netbox/virtualization/signals.py | 2 +- .../virtualization/tables/virtualmachines.py | 2 +- netbox/virtualization/tests/test_api.py | 23 ++++----- .../virtualization/tests/test_filtersets.py | 42 +++++++--------- netbox/virtualization/tests/test_views.py | 49 ++++++++----------- netbox/virtualization/views.py | 2 +- 8 files changed, 69 insertions(+), 93 deletions(-) diff --git a/netbox/virtualization/filtersets.py b/netbox/virtualization/filtersets.py index 1f7ddabe1..4c9e0d8e2 100644 --- a/netbox/virtualization/filtersets.py +++ b/netbox/virtualization/filtersets.py @@ -327,5 +327,6 @@ class VirtualDiskFilterSet(NetBoxModelFilterSet): if not value.strip(): return queryset return queryset.filter( - Q(name__icontains=value) + Q(name__icontains=value) | + Q(description__icontains=value) ) diff --git a/netbox/virtualization/forms/model_forms.py b/netbox/virtualization/forms/model_forms.py index 615b223cf..b099fdb7f 100644 --- a/netbox/virtualization/forms/model_forms.py +++ b/netbox/virtualization/forms/model_forms.py @@ -281,12 +281,26 @@ class VirtualMachineForm(TenancyForm, NetBoxModelForm): self.fields['primary_ip6'].widget.attrs['readonly'] = True -class VMInterfaceForm(InterfaceCommonForm, NetBoxModelForm): +# +# Virtual machine components +# + +class VMComponentForm(NetBoxModelForm): virtual_machine = DynamicModelChoiceField( label=_('Virtual machine'), queryset=VirtualMachine.objects.all(), selector=True ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # Disable reassignment of VirtualMachine when editing an existing instance + if self.instance.pk: + self.fields['virtual_machine'].disabled = True + + +class VMInterfaceForm(InterfaceCommonForm, VMComponentForm): parent = DynamicModelChoiceField( queryset=VMInterface.objects.all(), required=False, @@ -353,23 +367,11 @@ class VMInterfaceForm(InterfaceCommonForm, NetBoxModelForm): 'mode': HTMXSelect(), } - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - # Disable reassignment of VirtualMachine when editing an existing instance - if self.instance.pk: - self.fields['virtual_machine'].disabled = True - - -class VirtualDiskForm(NetBoxModelForm): - virtual_machine = DynamicModelChoiceField( - label=_('Virtual machine'), - queryset=VirtualMachine.objects.all(), - selector=True - ) +class VirtualDiskForm(VMComponentForm): fieldsets = ( - (None, ('virtual_machine', 'name', 'size', 'description', 'tags')), + (_('Disk'), ('virtual_machine', 'name', 'size', 'description', 'tags')), ) class Meta: @@ -377,10 +379,3 @@ class VirtualDiskForm(NetBoxModelForm): fields = [ 'virtual_machine', 'name', 'size', 'description', 'tags', ] - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # Disable reassignment of VirtualMachine when editing an existing instance - if self.instance.pk: - self.fields['virtual_machine'].disabled = True diff --git a/netbox/virtualization/signals.py b/netbox/virtualization/signals.py index 2ee015211..06f172179 100644 --- a/netbox/virtualization/signals.py +++ b/netbox/virtualization/signals.py @@ -6,7 +6,7 @@ from .models import VirtualDisk, VirtualMachine @receiver((post_delete, post_save), sender=VirtualDisk) -def update_circuit(instance, **kwargs): +def update_virtualmachine_disk(instance, **kwargs): """ When a VirtualDisk has been modified, update the aggregate disk_size value of its VM. """ diff --git a/netbox/virtualization/tables/virtualmachines.py b/netbox/virtualization/tables/virtualmachines.py index 9eb171e01..88627462a 100644 --- a/netbox/virtualization/tables/virtualmachines.py +++ b/netbox/virtualization/tables/virtualmachines.py @@ -105,11 +105,11 @@ class VirtualMachineTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable) 'pk', 'name', 'status', 'site', 'cluster', 'role', 'tenant', 'vcpus', 'memory', 'disk', 'primary_ip', ) + # # VM components # - class VMInterfaceTable(BaseInterfaceTable): virtual_machine = tables.Column( verbose_name=_('Virtual Machine'), diff --git a/netbox/virtualization/tests/test_api.py b/netbox/virtualization/tests/test_api.py index 18b516623..1b636e32c 100644 --- a/netbox/virtualization/tests/test_api.py +++ b/netbox/virtualization/tests/test_api.py @@ -4,7 +4,7 @@ from rest_framework import status from dcim.choices import InterfaceModeChoices from dcim.models import Site from ipam.models import VLAN, VRF -from utilities.testing import APITestCase, APIViewTestCases, create_test_device +from utilities.testing import APITestCase, APIViewTestCases, create_test_device, create_test_virtualmachine from virtualization.choices import * from virtualization.models import * @@ -239,10 +239,7 @@ class VMInterfaceTest(APIViewTestCases.APIViewTestCase): @classmethod def setUpTestData(cls): - - clustertype = ClusterType.objects.create(name='Test Cluster Type 1', slug='test-cluster-type-1') - cluster = Cluster.objects.create(name='Test Cluster 1', type=clustertype) - virtualmachine = VirtualMachine.objects.create(cluster=cluster, name='Test VM 1') + virtualmachine = create_test_virtualmachine('Virtual Machine 1') interfaces = ( VMInterface(virtual_machine=virtualmachine, name='Interface 1'), @@ -331,14 +328,12 @@ class VirtualDiskTest(APIViewTestCases.APIViewTestCase): @classmethod def setUpTestData(cls): - clustertype = ClusterType.objects.create(name='Test Cluster Type 1', slug='test-cluster-type-1') - cluster = Cluster.objects.create(name='Test Cluster 1', type=clustertype) - virtualmachine = VirtualMachine.objects.create(cluster=cluster, name='Test VM 1') + virtualmachine = create_test_virtualmachine('Virtual Machine 1') disks = ( - VirtualDisk(virtual_machine=virtualmachine, name='Disk 1', size=123), - VirtualDisk(virtual_machine=virtualmachine, name='Disk 2', size=456), - VirtualDisk(virtual_machine=virtualmachine, name='Disk 3', size=789), + VirtualDisk(virtual_machine=virtualmachine, name='Disk 1', size=10), + VirtualDisk(virtual_machine=virtualmachine, name='Disk 2', size=20), + VirtualDisk(virtual_machine=virtualmachine, name='Disk 3', size=30), ) VirtualDisk.objects.bulk_create(disks) @@ -346,16 +341,16 @@ class VirtualDiskTest(APIViewTestCases.APIViewTestCase): { 'virtual_machine': virtualmachine.pk, 'name': 'Disk 4', - 'size': 111, + 'size': 10, }, { 'virtual_machine': virtualmachine.pk, 'name': 'Disk 5', - 'size': 222, + 'size': 20, }, { 'virtual_machine': virtualmachine.pk, 'name': 'Disk 6', - 'size': 333, + 'size': 30, }, ] diff --git a/netbox/virtualization/tests/test_filtersets.py b/netbox/virtualization/tests/test_filtersets.py index f9eada9e7..a0cead8c0 100644 --- a/netbox/virtualization/tests/test_filtersets.py +++ b/netbox/virtualization/tests/test_filtersets.py @@ -524,35 +524,30 @@ class VirtualDiskTestCase(TestCase, ChangeLoggedFilterSetTests): @classmethod def setUpTestData(cls): - - cluster_types = ( - ClusterType(name='Cluster Type 1', slug='cluster-type-1'), - ClusterType(name='Cluster Type 2', slug='cluster-type-2'), - ClusterType(name='Cluster Type 3', slug='cluster-type-3'), - ) - ClusterType.objects.bulk_create(cluster_types) - - clusters = ( - Cluster(name='Cluster 1', type=cluster_types[0]), - Cluster(name='Cluster 2', type=cluster_types[1]), - Cluster(name='Cluster 3', type=cluster_types[2]), - ) - Cluster.objects.bulk_create(clusters) + cluster_type = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1') + cluster = Cluster.objects.create(name='Cluster 1', type=cluster_type) vms = ( - VirtualMachine(name='Virtual Machine 1', cluster=clusters[0]), - VirtualMachine(name='Virtual Machine 2', cluster=clusters[1]), - VirtualMachine(name='Virtual Machine 3', cluster=clusters[2]), + VirtualMachine(name='Virtual Machine 1', cluster=cluster), + VirtualMachine(name='Virtual Machine 2', cluster=cluster), + VirtualMachine(name='Virtual Machine 3', cluster=cluster), ) VirtualMachine.objects.bulk_create(vms) disks = ( - VirtualDisk(virtual_machine=vms[0], name='Disk 1', size=1,), - VirtualDisk(virtual_machine=vms[1], name='Disk 2', size=2,), - VirtualDisk(virtual_machine=vms[2], name='Disk 3', size=3,), + VirtualDisk(virtual_machine=vms[0], name='Disk 1', size=1, description='A'), + VirtualDisk(virtual_machine=vms[1], name='Disk 2', size=2, description='B'), + VirtualDisk(virtual_machine=vms[2], name='Disk 3', size=3, description='C'), ) VirtualDisk.objects.bulk_create(disks) + def test_virtual_machine(self): + vms = VirtualMachine.objects.all()[:2] + params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'virtual_machine': [vms[0].name, vms[1].name]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_name(self): params = {'name': ['Disk 1', 'Disk 2']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -561,9 +556,6 @@ class VirtualDiskTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'size': [1, 2]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) - def test_virtual_machine(self): - vms = VirtualMachine.objects.all()[:2] - params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) - params = {'virtual_machine': [vms[0].name, vms[1].name]} + def test_description(self): + params = {'description': ['A', 'B']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) diff --git a/netbox/virtualization/tests/test_views.py b/netbox/virtualization/tests/test_views.py index db303fe2f..ed6bef1e4 100644 --- a/netbox/virtualization/tests/test_views.py +++ b/netbox/virtualization/tests/test_views.py @@ -5,7 +5,7 @@ from netaddr import EUI from dcim.choices import InterfaceModeChoices from dcim.models import DeviceRole, Platform, Site from ipam.models import VLAN, VRF -from utilities.testing import ViewTestCases, create_tags, create_test_device +from utilities.testing import ViewTestCases, create_tags, create_test_device, create_test_virtualmachine from virtualization.choices import * from virtualization.models import * @@ -411,53 +411,46 @@ class VirtualDiskTestCase(ViewTestCases.DeviceComponentViewTestCase): @classmethod def setUpTestData(cls): - - site = Site.objects.create(name='Site 1', slug='site-1') - role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') - clustertype = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1') - cluster = Cluster.objects.create(name='Cluster 1', type=clustertype, site=site) - virtualmachines = ( - VirtualMachine(name='Virtual Machine 1', site=site, cluster=cluster, role=role), - VirtualMachine(name='Virtual Machine 2', site=site, cluster=cluster, role=role), - ) - VirtualMachine.objects.bulk_create(virtualmachines) + virtualmachine = create_test_virtualmachine('Virtual Machine 1') disks = VirtualDisk.objects.bulk_create([ - VirtualDisk(virtual_machine=virtualmachines[0], name='Disk 1', size=123), - VirtualDisk(virtual_machine=virtualmachines[0], name='Disk 2', size=456), - VirtualDisk(virtual_machine=virtualmachines[0], name='Disk 3', size=789), + VirtualDisk(virtual_machine=virtualmachine, name='Virtual Disk 1', size=10), + VirtualDisk(virtual_machine=virtualmachine, name='Virtual Disk 2', size=10), + VirtualDisk(virtual_machine=virtualmachine, name='Virtual Disk 3', size=10), ]) tags = create_tags('Alpha', 'Bravo', 'Charlie') cls.form_data = { - 'virtual_machine': virtualmachines[0].pk, - 'name': 'Disk X', - 'size': 123, + 'virtual_machine': virtualmachine.pk, + 'name': 'Virtual Disk X', + 'size': 20, + 'description': 'New description', 'tags': [t.pk for t in tags], } cls.bulk_create_data = { - 'virtual_machine': virtualmachines[1].pk, - 'name': 'Disk [4-6]', - 'size': 456, + 'virtual_machine': virtualmachine.pk, + 'name': 'Virtual Disk [4-6]', + 'size': 10, 'tags': [t.pk for t in tags], } cls.csv_data = ( - f"virtual_machine,name,size", - f"Virtual Machine 2,Disk 4,111", - f"Virtual Machine 2,Disk 5,222", - f"Virtual Machine 2,Disk 6,333", + f"virtual_machine,name,size,description", + f"Virtual Machine 1,Disk 4,20,Fourth", + f"Virtual Machine 1,Disk 5,20,Fifth", + f"Virtual Machine 1,Disk 6,20,Sixth", ) cls.csv_update_data = ( f"id,name,size", - f"{disks[0].pk},Disk 7,777", - f"{disks[1].pk},Disk 8,888", - f"{disks[2].pk},Disk 9,999", + f"{disks[0].pk},disk1,20", + f"{disks[1].pk},disk2,20", + f"{disks[2].pk},disk3,20", ) cls.bulk_edit_data = { - 'size': 444, + 'size': 30, + 'description': 'New description', } diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index c19d94bca..6019fc227 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -579,7 +579,7 @@ class VMInterfaceBulkDeleteView(generic.BulkDeleteView): # -# Virtual Disk +# Virtual disks # class VirtualDiskListView(generic.ObjectListView):