views.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. from django.shortcuts import get_object_or_404
  2. from rest_framework.mixins import (
  3. CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin,
  4. )
  5. from rest_framework.viewsets import GenericViewSet, ModelViewSet
  6. from dcim.models import Device
  7. from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
  8. from ipam import filters
  9. from extras.api.views import CustomFieldModelViewSet
  10. from utilities.api import WritableSerializerMixin
  11. from . import serializers
  12. #
  13. # VRFs
  14. #
  15. class VRFViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
  16. queryset = VRF.objects.select_related('tenant')
  17. serializer_class = serializers.VRFSerializer
  18. write_serializer_class = serializers.WritableVRFSerializer
  19. filter_class = filters.VRFFilter
  20. #
  21. # Roles
  22. #
  23. class RoleViewSet(ModelViewSet):
  24. queryset = Role.objects.all()
  25. serializer_class = serializers.RoleSerializer
  26. #
  27. # RIRs
  28. #
  29. class RIRViewSet(ModelViewSet):
  30. queryset = RIR.objects.all()
  31. serializer_class = serializers.RIRSerializer
  32. #
  33. # Aggregates
  34. #
  35. class AggregateViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
  36. queryset = Aggregate.objects.select_related('rir')
  37. serializer_class = serializers.AggregateSerializer
  38. write_serializer_class = serializers.WritableAggregateSerializer
  39. filter_class = filters.AggregateFilter
  40. #
  41. # Prefixes
  42. #
  43. class PrefixViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
  44. queryset = Prefix.objects.select_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role')
  45. serializer_class = serializers.PrefixSerializer
  46. write_serializer_class = serializers.WritablePrefixSerializer
  47. filter_class = filters.PrefixFilter
  48. #
  49. # IP addresses
  50. #
  51. class IPAddressViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
  52. queryset = IPAddress.objects.select_related('vrf__tenant', 'tenant', 'interface__device', 'nat_inside')
  53. serializer_class = serializers.IPAddressSerializer
  54. write_serializer_class = serializers.WritableIPAddressSerializer
  55. filter_class = filters.IPAddressFilter
  56. #
  57. # VLAN groups
  58. #
  59. class VLANGroupViewSet(WritableSerializerMixin, ModelViewSet):
  60. queryset = VLANGroup.objects.select_related('site')
  61. serializer_class = serializers.VLANGroupSerializer
  62. write_serializer_class = serializers.WritableVLANGroupSerializer
  63. filter_class = filters.VLANGroupFilter
  64. #
  65. # VLANs
  66. #
  67. class VLANViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
  68. queryset = VLAN.objects.select_related('site', 'group', 'tenant', 'role')
  69. serializer_class = serializers.VLANSerializer
  70. write_serializer_class = serializers.WritableVLANSerializer
  71. filter_class = filters.VLANFilter
  72. #
  73. # Services
  74. #
  75. class ServiceViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, WritableSerializerMixin, GenericViewSet):
  76. queryset = Service.objects.select_related('device')
  77. serializer_class = serializers.ServiceSerializer
  78. class DeviceServiceViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
  79. serializer_class = serializers.DeviceServiceSerializer
  80. def get_queryset(self):
  81. device = get_object_or_404(Device, pk=self.kwargs['pk'])
  82. return Service.objects.filter(device=device).select_related('device')