Coverage for virtualization/api/views.py: 98%
41 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from django.db.models import Sum
2from rest_framework.routers import APIRootView
4from extras.api.mixins import ConfigContextQuerySetMixin, RenderConfigMixin
5from netbox.api.viewsets import NetBoxModelViewSet
6from utilities.query_functions import CollateAsChar
7from virtualization import filtersets
8from virtualization.models import *
10from . import serializers
13class VirtualizationRootView(APIRootView):
14 """
15 Virtualization API root view
16 """
18 def get_view_name(self):
19 return 'Virtualization'
22#
23# Clusters
24#
27class ClusterTypeViewSet(NetBoxModelViewSet):
28 queryset = ClusterType.objects.all()
29 serializer_class = serializers.ClusterTypeSerializer
30 filterset_class = filtersets.ClusterTypeFilterSet
33class ClusterGroupViewSet(NetBoxModelViewSet):
34 queryset = ClusterGroup.objects.all()
35 serializer_class = serializers.ClusterGroupSerializer
36 filterset_class = filtersets.ClusterGroupFilterSet
39class ClusterViewSet(NetBoxModelViewSet):
40 queryset = Cluster.objects.prefetch_related('virtual_machines').annotate(
41 allocated_vcpus=Sum('virtual_machines__vcpus'),
42 allocated_memory=Sum('virtual_machines__memory'),
43 allocated_disk=Sum('virtual_machines__disk'),
44 )
45 serializer_class = serializers.ClusterSerializer
46 filterset_class = filtersets.ClusterFilterSet
49#
50# Virtual machine types
51#
54class VirtualMachineTypeViewSet(NetBoxModelViewSet):
55 queryset = VirtualMachineType.objects.all()
56 serializer_class = serializers.VirtualMachineTypeSerializer
57 filterset_class = filtersets.VirtualMachineTypeFilterSet
60#
61# Virtual machines
62#
65class VirtualMachineViewSet(ConfigContextQuerySetMixin, RenderConfigMixin, NetBoxModelViewSet):
66 queryset = VirtualMachine.objects.all()
67 serializer_class = serializers.VirtualMachineSerializer
68 filterset_class = filtersets.VirtualMachineFilterSet
71class VMInterfaceViewSet(NetBoxModelViewSet):
72 queryset = VMInterface.objects.prefetch_related(
73 'l2vpn_terminations', # Referenced by VMInterfaceSerializer.l2vpn_termination
74 'ip_addresses', # Referenced by VMInterface.count_ipaddresses()
75 'fhrp_group_assignments', # Referenced by VMInterface.count_fhrp_groups()
76 )
77 serializer_class = serializers.VMInterfaceSerializer
78 filterset_class = filtersets.VMInterfaceFilterSet
80 def get_bulk_destroy_queryset(self):
81 # Ensure child interfaces are deleted prior to their parents
82 return self.get_queryset().order_by('virtual_machine', 'parent', CollateAsChar('_name'))
85class VirtualDiskViewSet(NetBoxModelViewSet):
86 queryset = VirtualDisk.objects.all()
87 serializer_class = serializers.VirtualDiskSerializer
88 filterset_class = filtersets.VirtualDiskFilterSet