mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-22 23:46:44 -06:00
Misc cleanup
This commit is contained in:
parent
b0186169f7
commit
c672b7a9fc
@ -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)
|
||||||
)
|
)
|
||||||
|
@ -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
|
|
||||||
|
@ -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.
|
||||||
"""
|
"""
|
||||||
|
@ -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'),
|
||||||
|
@ -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,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
@ -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)
|
||||||
|
@ -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',
|
||||||
}
|
}
|
||||||
|
@ -579,7 +579,7 @@ class VMInterfaceBulkDeleteView(generic.BulkDeleteView):
|
|||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Virtual Disk
|
# Virtual disks
|
||||||
#
|
#
|
||||||
|
|
||||||
class VirtualDiskListView(generic.ObjectListView):
|
class VirtualDiskListView(generic.ObjectListView):
|
||||||
|
Loading…
Reference in New Issue
Block a user