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

1from django.db.models import Sum 

2from rest_framework.routers import APIRootView 

3 

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 * 

9 

10from . import serializers 

11 

12 

13class VirtualizationRootView(APIRootView): 

14 """ 

15 Virtualization API root view 

16 """ 

17 

18 def get_view_name(self): 

19 return 'Virtualization' 

20 

21 

22# 

23# Clusters 

24# 

25 

26 

27class ClusterTypeViewSet(NetBoxModelViewSet): 

28 queryset = ClusterType.objects.all() 

29 serializer_class = serializers.ClusterTypeSerializer 

30 filterset_class = filtersets.ClusterTypeFilterSet 

31 

32 

33class ClusterGroupViewSet(NetBoxModelViewSet): 

34 queryset = ClusterGroup.objects.all() 

35 serializer_class = serializers.ClusterGroupSerializer 

36 filterset_class = filtersets.ClusterGroupFilterSet 

37 

38 

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 

47 

48 

49# 

50# Virtual machine types 

51# 

52 

53 

54class VirtualMachineTypeViewSet(NetBoxModelViewSet): 

55 queryset = VirtualMachineType.objects.all() 

56 serializer_class = serializers.VirtualMachineTypeSerializer 

57 filterset_class = filtersets.VirtualMachineTypeFilterSet 

58 

59 

60# 

61# Virtual machines 

62# 

63 

64 

65class VirtualMachineViewSet(ConfigContextQuerySetMixin, RenderConfigMixin, NetBoxModelViewSet): 

66 queryset = VirtualMachine.objects.all() 

67 serializer_class = serializers.VirtualMachineSerializer 

68 filterset_class = filtersets.VirtualMachineFilterSet 

69 

70 

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 

79 

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')) 

83 

84 

85class VirtualDiskViewSet(NetBoxModelViewSet): 

86 queryset = VirtualDisk.objects.all() 

87 serializer_class = serializers.VirtualDiskSerializer 

88 filterset_class = filtersets.VirtualDiskFilterSet