views.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from __future__ import unicode_literals
  2. from dcim.models import Interface
  3. from extras.api.views import CustomFieldModelViewSet
  4. from utilities.api import FieldChoicesViewSet, ModelViewSet
  5. from virtualization import filters
  6. from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine
  7. from . import serializers
  8. #
  9. # Field choices
  10. #
  11. class VirtualizationFieldChoicesViewSet(FieldChoicesViewSet):
  12. fields = (
  13. (VirtualMachine, ['status']),
  14. )
  15. #
  16. # Clusters
  17. #
  18. class ClusterTypeViewSet(ModelViewSet):
  19. queryset = ClusterType.objects.all()
  20. serializer_class = serializers.ClusterTypeSerializer
  21. filter_class = filters.ClusterTypeFilter
  22. class ClusterGroupViewSet(ModelViewSet):
  23. queryset = ClusterGroup.objects.all()
  24. serializer_class = serializers.ClusterGroupSerializer
  25. filter_class = filters.ClusterGroupFilter
  26. class ClusterViewSet(CustomFieldModelViewSet):
  27. queryset = Cluster.objects.select_related('type', 'group').prefetch_related('tags')
  28. serializer_class = serializers.ClusterSerializer
  29. filter_class = filters.ClusterFilter
  30. #
  31. # Virtual machines
  32. #
  33. class VirtualMachineViewSet(CustomFieldModelViewSet):
  34. queryset = VirtualMachine.objects.select_related(
  35. 'cluster__site', 'role', 'tenant', 'platform', 'primary_ip4', 'primary_ip6'
  36. ).prefetch_related('tags')
  37. filter_class = filters.VirtualMachineFilter
  38. def get_serializer_class(self):
  39. """
  40. Include rendered config context when retrieving a single VirtualMachine.
  41. """
  42. if self.action == 'retrieve':
  43. return serializers.VirtualMachineWithConfigContextSerializer
  44. return serializers.VirtualMachineSerializer
  45. class InterfaceViewSet(ModelViewSet):
  46. queryset = Interface.objects.filter(
  47. virtual_machine__isnull=False
  48. ).select_related('virtual_machine').prefetch_related('tags')
  49. serializer_class = serializers.InterfaceSerializer
  50. filter_class = filters.InterfaceFilter