Misc cleanup

This commit is contained in:
Jeremy Stretch 2023-11-17 14:16:39 -05:00
parent b0186169f7
commit c672b7a9fc
8 changed files with 69 additions and 93 deletions

View File

@ -327,5 +327,6 @@ class VirtualDiskFilterSet(NetBoxModelFilterSet):
if not value.strip(): if not value.strip():
return queryset return queryset
return queryset.filter( return queryset.filter(
Q(name__icontains=value) Q(name__icontains=value) |
Q(description__icontains=value)
) )

View File

@ -281,12 +281,26 @@ class VirtualMachineForm(TenancyForm, NetBoxModelForm):
self.fields['primary_ip6'].widget.attrs['readonly'] = True self.fields['primary_ip6'].widget.attrs['readonly'] = True
class VMInterfaceForm(InterfaceCommonForm, NetBoxModelForm): #
# Virtual machine components
#
class VMComponentForm(NetBoxModelForm):
virtual_machine = DynamicModelChoiceField( virtual_machine = DynamicModelChoiceField(
label=_('Virtual machine'), label=_('Virtual machine'),
queryset=VirtualMachine.objects.all(), queryset=VirtualMachine.objects.all(),
selector=True 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( parent = DynamicModelChoiceField(
queryset=VMInterface.objects.all(), queryset=VMInterface.objects.all(),
required=False, required=False,
@ -353,23 +367,11 @@ class VMInterfaceForm(InterfaceCommonForm, NetBoxModelForm):
'mode': HTMXSelect(), 'mode': HTMXSelect(),
} }
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Disable reassignment of VirtualMachine when editing an existing instance class VirtualDiskForm(VMComponentForm):
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
)
fieldsets = ( fieldsets = (
(None, ('virtual_machine', 'name', 'size', 'description', 'tags')), (_('Disk'), ('virtual_machine', 'name', 'size', 'description', 'tags')),
) )
class Meta: class Meta:
@ -377,10 +379,3 @@ class VirtualDiskForm(NetBoxModelForm):
fields = [ fields = [
'virtual_machine', 'name', 'size', 'description', 'tags', '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

View File

@ -6,7 +6,7 @@ from .models import VirtualDisk, VirtualMachine
@receiver((post_delete, post_save), sender=VirtualDisk) @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. When a VirtualDisk has been modified, update the aggregate disk_size value of its VM.
""" """

View File

@ -105,11 +105,11 @@ class VirtualMachineTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable)
'pk', 'name', 'status', 'site', 'cluster', 'role', 'tenant', 'vcpus', 'memory', 'disk', 'primary_ip', 'pk', 'name', 'status', 'site', 'cluster', 'role', 'tenant', 'vcpus', 'memory', 'disk', 'primary_ip',
) )
# #
# VM components # VM components
# #
class VMInterfaceTable(BaseInterfaceTable): class VMInterfaceTable(BaseInterfaceTable):
virtual_machine = tables.Column( virtual_machine = tables.Column(
verbose_name=_('Virtual Machine'), verbose_name=_('Virtual Machine'),

View File

@ -4,7 +4,7 @@ from rest_framework import status
from dcim.choices import InterfaceModeChoices from dcim.choices import InterfaceModeChoices
from dcim.models import Site from dcim.models import Site
from ipam.models import VLAN, VRF 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.choices import *
from virtualization.models import * from virtualization.models import *
@ -239,10 +239,7 @@ class VMInterfaceTest(APIViewTestCases.APIViewTestCase):
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
virtualmachine = create_test_virtualmachine('Virtual Machine 1')
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')
interfaces = ( interfaces = (
VMInterface(virtual_machine=virtualmachine, name='Interface 1'), VMInterface(virtual_machine=virtualmachine, name='Interface 1'),
@ -331,14 +328,12 @@ class VirtualDiskTest(APIViewTestCases.APIViewTestCase):
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
clustertype = ClusterType.objects.create(name='Test Cluster Type 1', slug='test-cluster-type-1') virtualmachine = create_test_virtualmachine('Virtual Machine 1')
cluster = Cluster.objects.create(name='Test Cluster 1', type=clustertype)
virtualmachine = VirtualMachine.objects.create(cluster=cluster, name='Test VM 1')
disks = ( disks = (
VirtualDisk(virtual_machine=virtualmachine, name='Disk 1', size=123), VirtualDisk(virtual_machine=virtualmachine, name='Disk 1', size=10),
VirtualDisk(virtual_machine=virtualmachine, name='Disk 2', size=456), VirtualDisk(virtual_machine=virtualmachine, name='Disk 2', size=20),
VirtualDisk(virtual_machine=virtualmachine, name='Disk 3', size=789), VirtualDisk(virtual_machine=virtualmachine, name='Disk 3', size=30),
) )
VirtualDisk.objects.bulk_create(disks) VirtualDisk.objects.bulk_create(disks)
@ -346,16 +341,16 @@ class VirtualDiskTest(APIViewTestCases.APIViewTestCase):
{ {
'virtual_machine': virtualmachine.pk, 'virtual_machine': virtualmachine.pk,
'name': 'Disk 4', 'name': 'Disk 4',
'size': 111, 'size': 10,
}, },
{ {
'virtual_machine': virtualmachine.pk, 'virtual_machine': virtualmachine.pk,
'name': 'Disk 5', 'name': 'Disk 5',
'size': 222, 'size': 20,
}, },
{ {
'virtual_machine': virtualmachine.pk, 'virtual_machine': virtualmachine.pk,
'name': 'Disk 6', 'name': 'Disk 6',
'size': 333, 'size': 30,
}, },
] ]

View File

@ -524,35 +524,30 @@ class VirtualDiskTestCase(TestCase, ChangeLoggedFilterSetTests):
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
cluster_type = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1')
cluster_types = ( cluster = Cluster.objects.create(name='Cluster 1', type=cluster_type)
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)
vms = ( vms = (
VirtualMachine(name='Virtual Machine 1', cluster=clusters[0]), VirtualMachine(name='Virtual Machine 1', cluster=cluster),
VirtualMachine(name='Virtual Machine 2', cluster=clusters[1]), VirtualMachine(name='Virtual Machine 2', cluster=cluster),
VirtualMachine(name='Virtual Machine 3', cluster=clusters[2]), VirtualMachine(name='Virtual Machine 3', cluster=cluster),
) )
VirtualMachine.objects.bulk_create(vms) VirtualMachine.objects.bulk_create(vms)
disks = ( disks = (
VirtualDisk(virtual_machine=vms[0], name='Disk 1', size=1,), VirtualDisk(virtual_machine=vms[0], name='Disk 1', size=1, description='A'),
VirtualDisk(virtual_machine=vms[1], name='Disk 2', size=2,), VirtualDisk(virtual_machine=vms[1], name='Disk 2', size=2, description='B'),
VirtualDisk(virtual_machine=vms[2], name='Disk 3', size=3,), VirtualDisk(virtual_machine=vms[2], name='Disk 3', size=3, description='C'),
) )
VirtualDisk.objects.bulk_create(disks) 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): def test_name(self):
params = {'name': ['Disk 1', 'Disk 2']} params = {'name': ['Disk 1', 'Disk 2']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
@ -561,9 +556,6 @@ class VirtualDiskTestCase(TestCase, ChangeLoggedFilterSetTests):
params = {'size': [1, 2]} params = {'size': [1, 2]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_virtual_machine(self): def test_description(self):
vms = VirtualMachine.objects.all()[:2] params = {'description': ['A', 'B']}
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) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)

View File

@ -5,7 +5,7 @@ from netaddr import EUI
from dcim.choices import InterfaceModeChoices from dcim.choices import InterfaceModeChoices
from dcim.models import DeviceRole, Platform, Site from dcim.models import DeviceRole, Platform, Site
from ipam.models import VLAN, VRF 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.choices import *
from virtualization.models import * from virtualization.models import *
@ -411,53 +411,46 @@ class VirtualDiskTestCase(ViewTestCases.DeviceComponentViewTestCase):
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
virtualmachine = create_test_virtualmachine('Virtual Machine 1')
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)
disks = VirtualDisk.objects.bulk_create([ disks = VirtualDisk.objects.bulk_create([
VirtualDisk(virtual_machine=virtualmachines[0], name='Disk 1', size=123), VirtualDisk(virtual_machine=virtualmachine, name='Virtual Disk 1', size=10),
VirtualDisk(virtual_machine=virtualmachines[0], name='Disk 2', size=456), VirtualDisk(virtual_machine=virtualmachine, name='Virtual Disk 2', size=10),
VirtualDisk(virtual_machine=virtualmachines[0], name='Disk 3', size=789), VirtualDisk(virtual_machine=virtualmachine, name='Virtual Disk 3', size=10),
]) ])
tags = create_tags('Alpha', 'Bravo', 'Charlie') tags = create_tags('Alpha', 'Bravo', 'Charlie')
cls.form_data = { cls.form_data = {
'virtual_machine': virtualmachines[0].pk, 'virtual_machine': virtualmachine.pk,
'name': 'Disk X', 'name': 'Virtual Disk X',
'size': 123, 'size': 20,
'description': 'New description',
'tags': [t.pk for t in tags], 'tags': [t.pk for t in tags],
} }
cls.bulk_create_data = { cls.bulk_create_data = {
'virtual_machine': virtualmachines[1].pk, 'virtual_machine': virtualmachine.pk,
'name': 'Disk [4-6]', 'name': 'Virtual Disk [4-6]',
'size': 456, 'size': 10,
'tags': [t.pk for t in tags], 'tags': [t.pk for t in tags],
} }
cls.csv_data = ( cls.csv_data = (
f"virtual_machine,name,size", f"virtual_machine,name,size,description",
f"Virtual Machine 2,Disk 4,111", f"Virtual Machine 1,Disk 4,20,Fourth",
f"Virtual Machine 2,Disk 5,222", f"Virtual Machine 1,Disk 5,20,Fifth",
f"Virtual Machine 2,Disk 6,333", f"Virtual Machine 1,Disk 6,20,Sixth",
) )
cls.csv_update_data = ( cls.csv_update_data = (
f"id,name,size", f"id,name,size",
f"{disks[0].pk},Disk 7,777", f"{disks[0].pk},disk1,20",
f"{disks[1].pk},Disk 8,888", f"{disks[1].pk},disk2,20",
f"{disks[2].pk},Disk 9,999", f"{disks[2].pk},disk3,20",
) )
cls.bulk_edit_data = { cls.bulk_edit_data = {
'size': 444, 'size': 30,
'description': 'New description',
} }

View File

@ -579,7 +579,7 @@ class VMInterfaceBulkDeleteView(generic.BulkDeleteView):
# #
# Virtual Disk # Virtual disks
# #
class VirtualDiskListView(generic.ObjectListView): class VirtualDiskListView(generic.ObjectListView):