1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

78 lines
2.4 KiB
Python
Raw Normal View History

from dcim.models import Interface
2017-08-08 16:33:34 -04:00
from extras.api.views import CustomFieldModelViewSet
from utilities.api import FieldChoicesViewSet, ModelViewSet
2017-08-16 17:00:17 -04:00
from virtualization import filters
from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine
2017-08-08 16:33:34 -04:00
from . import serializers
#
# Field choices
#
class VirtualizationFieldChoicesViewSet(FieldChoicesViewSet):
fields = (
(VirtualMachine, ['status']),
)
2017-08-08 16:33:34 -04:00
#
# Clusters
#
class ClusterTypeViewSet(ModelViewSet):
queryset = ClusterType.objects.all()
serializer_class = serializers.ClusterTypeSerializer
2018-11-02 13:46:28 -04:00
filterset_class = filters.ClusterTypeFilter
2017-08-08 16:33:34 -04:00
class ClusterGroupViewSet(ModelViewSet):
queryset = ClusterGroup.objects.all()
serializer_class = serializers.ClusterGroupSerializer
2018-11-02 13:46:28 -04:00
filterset_class = filters.ClusterGroupFilter
2017-08-08 16:33:34 -04:00
class ClusterViewSet(CustomFieldModelViewSet):
queryset = Cluster.objects.select_related('type', 'group').prefetch_related('tags')
2017-08-08 16:33:34 -04:00
serializer_class = serializers.ClusterSerializer
2018-11-02 13:46:28 -04:00
filterset_class = filters.ClusterFilter
2017-08-08 16:33:34 -04:00
#
# Virtual machines
#
class VirtualMachineViewSet(CustomFieldModelViewSet):
queryset = VirtualMachine.objects.select_related(
'cluster__site', 'role', 'tenant', 'platform', 'primary_ip4', 'primary_ip6'
).prefetch_related('tags')
2018-11-02 13:46:28 -04:00
filterset_class = filters.VirtualMachineFilter
2017-08-08 16:33:34 -04:00
def get_serializer_class(self):
"""
Include rendered config context when retrieving a single VirtualMachine.
"""
if self.action == 'retrieve':
return serializers.VirtualMachineWithConfigContextSerializer
2018-10-04 16:20:01 -04:00
request = self.get_serializer_context()['request']
if request.query_params.get('brief', False):
return serializers.NestedVirtualMachineSerializer
return serializers.VirtualMachineSerializer
2018-06-27 16:02:34 -04:00
2017-08-08 16:33:34 -04:00
class InterfaceViewSet(ModelViewSet):
queryset = Interface.objects.filter(
virtual_machine__isnull=False
).select_related('virtual_machine').prefetch_related('tags')
serializer_class = serializers.InterfaceSerializer
2018-11-02 13:46:28 -04:00
filterset_class = filters.InterfaceFilter
2018-10-04 16:20:01 -04:00
def get_serializer_class(self):
request = self.get_serializer_context()['request']
if request.query_params.get('brief', False):
# Override get_serializer_for_model(), which will return the DCIM NestedInterfaceSerializer
return serializers.NestedInterfaceSerializer
return serializers.InterfaceSerializer