8356 cleanup views

This commit is contained in:
Arthur 2023-10-19 11:24:04 -07:00
parent 4aeb4d001c
commit 42068090f0
7 changed files with 30 additions and 38 deletions

View File

@ -14,7 +14,7 @@ from netbox.api.fields import ChoiceField, SerializedPKRelatedField
from netbox.api.serializers import NetBoxModelSerializer from netbox.api.serializers import NetBoxModelSerializer
from tenancy.api.nested_serializers import NestedTenantSerializer from tenancy.api.nested_serializers import NestedTenantSerializer
from virtualization.choices import * from virtualization.choices import *
from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualDisk, VirtualMachine, VMInterface
from .nested_serializers import * from .nested_serializers import *
@ -159,3 +159,18 @@ class VMInterfaceSerializer(NetBoxModelSerializer):
}) })
return super().validate(data) return super().validate(data)
#
# Virtual Disk
#
class VirtualDiskSerializer(NetBoxModelSerializer):
virtual_machine = NestedVirtualMachineSerializer()
class Meta:
model = VirtualDisk
fields = [
'id', 'virtual_machine', 'size', 'tags', 'custom_fields',
'created', 'last_updated',
]

View File

@ -13,6 +13,7 @@ router.register('clusters', views.ClusterViewSet)
# VirtualMachines # VirtualMachines
router.register('virtual-machines', views.VirtualMachineViewSet) router.register('virtual-machines', views.VirtualMachineViewSet)
router.register('interfaces', views.VMInterfaceViewSet) router.register('interfaces', views.VMInterfaceViewSet)
router.register('virtual-disks', views.VirtualDiskViewSet)
app_name = 'virtualization-api' app_name = 'virtualization-api'
urlpatterns = router.urls urlpatterns = router.urls

View File

@ -5,7 +5,7 @@ from extras.api.mixins import ConfigContextQuerySetMixin
from netbox.api.viewsets import NetBoxModelViewSet from netbox.api.viewsets import NetBoxModelViewSet
from utilities.utils import count_related from utilities.utils import count_related
from virtualization import filtersets from virtualization import filtersets
from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualDisk, VirtualMachine, VMInterface
from . import serializers from . import serializers
@ -87,3 +87,12 @@ class VMInterfaceViewSet(NetBoxModelViewSet):
serializer_class = serializers.VMInterfaceSerializer serializer_class = serializers.VMInterfaceSerializer
filterset_class = filtersets.VMInterfaceFilterSet filterset_class = filtersets.VMInterfaceFilterSet
brief_prefetch_fields = ['virtual_machine'] brief_prefetch_fields = ['virtual_machine']
class VirtualDiskViewSet(NetBoxModelViewSet):
queryset = VirtualDisk.objects.prefetch_related(
'virtual_machine', 'tags',
)
serializer_class = serializers.VirtualDiskSerializer
filterset_class = filtersets.VirtualDiskFilterSet
brief_prefetch_fields = ['virtual_machine']

View File

@ -228,14 +228,11 @@ class VirtualDiskFilterForm(NetBoxModelFilterSetForm):
model = VirtualDisk model = VirtualDisk
fieldsets = ( fieldsets = (
(None, ('q', 'filter_id', 'tag')), (None, ('q', 'filter_id', 'tag')),
(_('Virtual Machine'), ('virtual_machine_id')), # (_('Virtual Machine'), ('virtual_machine_id')),
) )
virtual_machine_id = DynamicModelMultipleChoiceField( virtual_machine_id = DynamicModelMultipleChoiceField(
queryset=VirtualMachine.objects.all(), queryset=VirtualMachine.objects.all(),
required=False, required=False,
query_params={
'cluster_id': '$cluster_id'
},
label=_('Virtual machine') label=_('Virtual machine')
) )
tag = TagFilterField(model) tag = TagFilterField(model)

View File

@ -360,7 +360,7 @@ class VirtualDiskForm(NetBoxModelForm):
) )
fieldsets = ( fieldsets = (
(_(''), ('virtual_machine', 'name', 'size', 'tags')), (None, ('virtual_machine', 'name', 'size', 'tags')),
) )
class Meta: class Meta:

View File

@ -390,10 +390,9 @@ class VirtualDisk(NetBoxModel, TrackingModelMixin):
blank=True blank=True
) )
size = models.PositiveIntegerField( size = models.PositiveIntegerField(
verbose_name=_('size'), verbose_name=_('size (GB)'),
blank=True, blank=True,
null=True, null=True,
help_text=_("Size")
) )
class Meta: class Meta:

View File

@ -591,35 +591,6 @@ class VirtualDiskListView(generic.ObjectListView):
class VirtualDiskView(generic.ObjectView): class VirtualDiskView(generic.ObjectView):
queryset = VirtualDisk.objects.all() queryset = VirtualDisk.objects.all()
def get_extra_context(self, request, instance):
# Get child interfaces
child_interfaces = VirtualDisk.objects.restrict(request.user, 'view').filter(parent=instance)
child_interfaces_tables = tables.VirtualDiskTable(
child_interfaces,
exclude=('virtual_machine',),
orderable=False
)
# Get assigned VLANs and annotate whether each is tagged or untagged
vlans = []
if instance.untagged_vlan is not None:
vlans.append(instance.untagged_vlan)
vlans[0].tagged = False
for vlan in instance.tagged_vlans.restrict(request.user).prefetch_related('site', 'group', 'tenant', 'role'):
vlan.tagged = True
vlans.append(vlan)
vlan_table = InterfaceVLANTable(
interface=instance,
data=vlans,
orderable=False
)
return {
'child_interfaces_table': child_interfaces_tables,
'vlan_table': vlan_table,
}
# class VirtualDiskCreateView(generic.ComponentCreateView): # class VirtualDiskCreateView(generic.ComponentCreateView):
# queryset = VirtualDisk.objects.all() # queryset = VirtualDisk.objects.all()