2020-08-13 12:45:38 -04:00
|
|
|
from rest_framework.routers import APIRootView
|
2019-04-12 17:07:56 -04:00
|
|
|
|
2023-11-17 16:32:58 +03:00
|
|
|
from extras.api.mixins import ConfigContextQuerySetMixin, RenderConfigMixin
|
2022-03-09 11:44:55 -05:00
|
|
|
from netbox.api.viewsets import NetBoxModelViewSet
|
2023-11-01 13:47:14 -04:00
|
|
|
from utilities.query_functions import CollateAsChar
|
2021-04-29 16:38:56 -04:00
|
|
|
from virtualization import filtersets
|
2023-11-17 12:02:56 -08:00
|
|
|
from virtualization.models import *
|
2017-08-08 16:33:34 -04:00
|
|
|
from . import serializers
|
|
|
|
|
|
|
|
|
2020-08-13 12:45:38 -04:00
|
|
|
class VirtualizationRootView(APIRootView):
|
|
|
|
"""
|
|
|
|
Virtualization API root view
|
|
|
|
"""
|
|
|
|
def get_view_name(self):
|
|
|
|
return 'Virtualization'
|
|
|
|
|
|
|
|
|
2017-08-08 16:33:34 -04:00
|
|
|
#
|
|
|
|
# Clusters
|
|
|
|
#
|
|
|
|
|
2022-03-09 11:44:55 -05:00
|
|
|
class ClusterTypeViewSet(NetBoxModelViewSet):
|
2024-02-15 14:49:27 -05:00
|
|
|
queryset = ClusterType.objects.all()
|
2017-08-08 16:33:34 -04:00
|
|
|
serializer_class = serializers.ClusterTypeSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.ClusterTypeFilterSet
|
2017-08-08 16:33:34 -04:00
|
|
|
|
|
|
|
|
2022-03-09 11:44:55 -05:00
|
|
|
class ClusterGroupViewSet(NetBoxModelViewSet):
|
2024-02-15 14:49:27 -05:00
|
|
|
queryset = ClusterGroup.objects.all()
|
2017-08-08 16:33:34 -04:00
|
|
|
serializer_class = serializers.ClusterGroupSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.ClusterGroupFilterSet
|
2017-08-08 16:33:34 -04:00
|
|
|
|
|
|
|
|
2022-03-09 11:44:55 -05:00
|
|
|
class ClusterViewSet(NetBoxModelViewSet):
|
2024-02-15 14:49:27 -05:00
|
|
|
queryset = Cluster.objects.all()
|
2017-08-08 16:33:34 -04:00
|
|
|
serializer_class = serializers.ClusterSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.ClusterFilterSet
|
2017-08-08 16:33:34 -04:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Virtual machines
|
|
|
|
#
|
|
|
|
|
2023-11-17 16:32:58 +03:00
|
|
|
class VirtualMachineViewSet(ConfigContextQuerySetMixin, RenderConfigMixin, NetBoxModelViewSet):
|
2024-02-14 09:28:37 -05:00
|
|
|
queryset = VirtualMachine.objects.all()
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.VirtualMachineFilterSet
|
2017-08-08 16:33:34 -04:00
|
|
|
|
2018-07-03 12:29:20 -04:00
|
|
|
def get_serializer_class(self):
|
|
|
|
"""
|
2019-02-18 22:10:05 -05:00
|
|
|
Select the specific serializer based on the request context.
|
|
|
|
|
|
|
|
If the `brief` query param equates to True, return the NestedVirtualMachineSerializer
|
|
|
|
|
|
|
|
If the `exclude` query param includes `config_context` as a value, return the VirtualMachineSerializer
|
|
|
|
|
|
|
|
Else, return the VirtualMachineWithConfigContextSerializer
|
2018-07-03 12:29:20 -04:00
|
|
|
"""
|
2018-10-04 16:20:01 -04:00
|
|
|
|
|
|
|
request = self.get_serializer_context()['request']
|
|
|
|
if request.query_params.get('brief', False):
|
|
|
|
return serializers.NestedVirtualMachineSerializer
|
|
|
|
|
2019-02-18 22:10:05 -05:00
|
|
|
elif 'config_context' in request.query_params.get('exclude', []):
|
|
|
|
return serializers.VirtualMachineSerializer
|
|
|
|
|
|
|
|
return serializers.VirtualMachineWithConfigContextSerializer
|
2018-06-27 16:02:34 -04:00
|
|
|
|
2017-08-08 16:33:34 -04:00
|
|
|
|
2022-03-09 11:09:06 -05:00
|
|
|
class VMInterfaceViewSet(NetBoxModelViewSet):
|
2020-07-10 10:27:07 -04:00
|
|
|
queryset = VMInterface.objects.prefetch_related(
|
2024-02-14 09:28:37 -05:00
|
|
|
'l2vpn_terminations', # Referenced by VMInterfaceSerializer.l2vpn_termination
|
|
|
|
'ip_addresses', # Referenced by VMInterface.count_ipaddresses()
|
|
|
|
'fhrp_group_assignments', # Referenced by VMInterface.count_fhrp_groups()
|
2019-08-19 01:53:39 -04:00
|
|
|
)
|
2020-06-23 15:46:20 -04:00
|
|
|
serializer_class = serializers.VMInterfaceSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.VMInterfaceFilterSet
|
2023-11-01 13:47:14 -04:00
|
|
|
|
|
|
|
def get_bulk_destroy_queryset(self):
|
|
|
|
# Ensure child interfaces are deleted prior to their parents
|
|
|
|
return self.get_queryset().order_by('virtual_machine', 'parent', CollateAsChar('_name'))
|
2023-11-17 12:02:56 -08:00
|
|
|
|
|
|
|
|
|
|
|
class VirtualDiskViewSet(NetBoxModelViewSet):
|
2024-02-14 09:28:37 -05:00
|
|
|
queryset = VirtualDisk.objects.all()
|
2023-11-17 12:02:56 -08:00
|
|
|
serializer_class = serializers.VirtualDiskSerializer
|
|
|
|
filterset_class = filtersets.VirtualDiskFilterSet
|