2020-08-13 12:45:38 -04:00
|
|
|
from rest_framework.routers import APIRootView
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-24 17:12:16 -05:00
|
|
|
from extras.api.views import CustomFieldModelViewSet
|
2021-04-29 16:38:56 -04:00
|
|
|
from ipam import filtersets
|
2021-07-16 09:15:19 -04:00
|
|
|
from ipam.models import *
|
2020-10-13 15:54:23 -04:00
|
|
|
from netbox.api.views import ModelViewSet
|
2020-12-17 14:47:49 -05:00
|
|
|
from utilities.utils import count_related
|
2021-07-16 14:48:42 -04:00
|
|
|
from . import mixins, serializers
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2020-08-13 12:45:38 -04:00
|
|
|
class IPAMRootView(APIRootView):
|
|
|
|
"""
|
|
|
|
IPAM API root view
|
|
|
|
"""
|
|
|
|
def get_view_name(self):
|
|
|
|
return 'IPAM'
|
|
|
|
|
|
|
|
|
2016-07-15 13:26:54 -04:00
|
|
|
#
|
|
|
|
# VRFs
|
|
|
|
#
|
|
|
|
|
2017-11-07 15:36:10 -05:00
|
|
|
class VRFViewSet(CustomFieldModelViewSet):
|
2020-09-24 12:09:28 -04:00
|
|
|
queryset = VRF.objects.prefetch_related('tenant').prefetch_related(
|
|
|
|
'import_targets', 'export_targets', 'tags'
|
|
|
|
).annotate(
|
2020-12-17 14:47:49 -05:00
|
|
|
ipaddress_count=count_related(IPAddress, 'vrf'),
|
|
|
|
prefix_count=count_related(Prefix, 'vrf')
|
2020-11-25 15:49:18 -05:00
|
|
|
)
|
2016-05-18 16:20:30 -04:00
|
|
|
serializer_class = serializers.VRFSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.VRFFilterSet
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2020-09-24 11:25:52 -04:00
|
|
|
#
|
|
|
|
# Route targets
|
|
|
|
#
|
|
|
|
|
|
|
|
class RouteTargetViewSet(CustomFieldModelViewSet):
|
|
|
|
queryset = RouteTarget.objects.prefetch_related('tenant').prefetch_related('tags')
|
|
|
|
serializer_class = serializers.RouteTargetSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.RouteTargetFilterSet
|
2020-09-24 11:25:52 -04:00
|
|
|
|
|
|
|
|
2016-07-15 13:26:54 -04:00
|
|
|
#
|
|
|
|
# RIRs
|
|
|
|
#
|
|
|
|
|
2021-02-25 15:58:13 -05:00
|
|
|
class RIRViewSet(CustomFieldModelViewSet):
|
2019-04-12 17:07:56 -04:00
|
|
|
queryset = RIR.objects.annotate(
|
2020-12-17 14:47:49 -05:00
|
|
|
aggregate_count=count_related(Aggregate, 'rir')
|
2020-11-25 15:49:18 -05:00
|
|
|
)
|
2016-05-18 16:20:30 -04:00
|
|
|
serializer_class = serializers.RIRSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.RIRFilterSet
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2016-07-15 13:26:54 -04:00
|
|
|
#
|
|
|
|
# Aggregates
|
|
|
|
#
|
|
|
|
|
2017-11-07 15:36:10 -05:00
|
|
|
class AggregateViewSet(CustomFieldModelViewSet):
|
2019-08-19 01:53:39 -04:00
|
|
|
queryset = Aggregate.objects.prefetch_related('rir').prefetch_related('tags')
|
2016-05-18 16:20:30 -04:00
|
|
|
serializer_class = serializers.AggregateSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.AggregateFilterSet
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2017-06-19 16:10:18 -04:00
|
|
|
#
|
|
|
|
# Roles
|
|
|
|
#
|
|
|
|
|
2021-02-25 15:58:13 -05:00
|
|
|
class RoleViewSet(CustomFieldModelViewSet):
|
2019-04-12 17:07:56 -04:00
|
|
|
queryset = Role.objects.annotate(
|
2020-12-17 14:47:49 -05:00
|
|
|
prefix_count=count_related(Prefix, 'role'),
|
|
|
|
vlan_count=count_related(VLAN, 'role')
|
2020-11-25 15:49:18 -05:00
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
serializer_class = serializers.RoleSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.RoleFilterSet
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
2016-07-15 13:26:54 -04:00
|
|
|
#
|
|
|
|
# Prefixes
|
|
|
|
#
|
|
|
|
|
2021-07-16 14:48:42 -04:00
|
|
|
class PrefixViewSet(mixins.AvailableIPsMixin, mixins.AvailablePrefixesMixin, CustomFieldModelViewSet):
|
2020-11-16 10:17:05 -05:00
|
|
|
queryset = Prefix.objects.prefetch_related(
|
|
|
|
'site', 'vrf__tenant', 'tenant', 'vlan', 'role', 'tags'
|
2020-11-25 15:49:18 -05:00
|
|
|
)
|
2016-05-18 16:20:30 -04:00
|
|
|
serializer_class = serializers.PrefixSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.PrefixFilterSet
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2021-07-19 09:32:04 -04:00
|
|
|
parent_model = Prefix # AvailableIPsMixin
|
|
|
|
|
2020-07-13 15:52:35 -04:00
|
|
|
def get_serializer_class(self):
|
|
|
|
if self.action == "available_prefixes" and self.request.method == "POST":
|
|
|
|
return serializers.PrefixLengthSerializer
|
|
|
|
return super().get_serializer_class()
|
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2021-07-16 09:15:19 -04:00
|
|
|
#
|
|
|
|
# IP ranges
|
|
|
|
#
|
|
|
|
|
2021-07-19 09:32:04 -04:00
|
|
|
class IPRangeViewSet(mixins.AvailableIPsMixin, CustomFieldModelViewSet):
|
2021-07-16 09:15:19 -04:00
|
|
|
queryset = IPRange.objects.prefetch_related('vrf', 'role', 'tenant', 'tags')
|
|
|
|
serializer_class = serializers.IPRangeSerializer
|
|
|
|
filterset_class = filtersets.IPRangeFilterSet
|
|
|
|
|
2021-07-19 09:32:04 -04:00
|
|
|
parent_model = IPRange # AvailableIPsMixin
|
|
|
|
|
2021-07-16 09:15:19 -04:00
|
|
|
|
2016-07-15 13:26:54 -04:00
|
|
|
#
|
|
|
|
# IP addresses
|
|
|
|
#
|
|
|
|
|
2017-11-07 15:36:10 -05:00
|
|
|
class IPAddressViewSet(CustomFieldModelViewSet):
|
2019-08-19 01:53:39 -04:00
|
|
|
queryset = IPAddress.objects.prefetch_related(
|
2020-09-04 16:09:05 -04:00
|
|
|
'vrf__tenant', 'tenant', 'nat_inside', 'nat_outside', 'tags', 'assigned_object'
|
2020-11-25 15:49:18 -05:00
|
|
|
)
|
2016-05-18 16:20:30 -04:00
|
|
|
serializer_class = serializers.IPAddressSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.IPAddressFilterSet
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2016-07-15 13:26:54 -04:00
|
|
|
#
|
|
|
|
# VLAN groups
|
|
|
|
#
|
|
|
|
|
2021-02-25 15:58:13 -05:00
|
|
|
class VLANGroupViewSet(CustomFieldModelViewSet):
|
2021-03-09 14:13:50 -05:00
|
|
|
queryset = VLANGroup.objects.annotate(
|
2020-12-17 14:47:49 -05:00
|
|
|
vlan_count=count_related(VLAN, 'group')
|
2020-11-25 15:49:18 -05:00
|
|
|
)
|
2016-07-15 13:26:54 -04:00
|
|
|
serializer_class = serializers.VLANGroupSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.VLANGroupFilterSet
|
2016-07-15 13:26:54 -04:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# VLANs
|
|
|
|
#
|
|
|
|
|
2017-11-07 15:36:10 -05:00
|
|
|
class VLANViewSet(CustomFieldModelViewSet):
|
2019-08-19 01:53:39 -04:00
|
|
|
queryset = VLAN.objects.prefetch_related(
|
|
|
|
'site', 'group', 'tenant', 'role', 'tags'
|
2019-04-19 16:50:42 -04:00
|
|
|
).annotate(
|
2020-12-17 14:47:49 -05:00
|
|
|
prefix_count=count_related(Prefix, 'vlan')
|
2020-11-25 15:49:18 -05:00
|
|
|
)
|
2016-05-18 16:20:30 -04:00
|
|
|
serializer_class = serializers.VLANSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.VLANFilterSet
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2016-12-15 15:32:58 -05:00
|
|
|
#
|
|
|
|
# Services
|
|
|
|
#
|
|
|
|
|
2017-11-07 15:36:10 -05:00
|
|
|
class ServiceViewSet(ModelViewSet):
|
2020-06-29 11:35:13 -04:00
|
|
|
queryset = Service.objects.prefetch_related(
|
2020-07-23 12:48:03 -04:00
|
|
|
'device', 'virtual_machine', 'tags', 'ipaddresses'
|
2020-06-29 11:35:13 -04:00
|
|
|
)
|
2016-12-15 15:32:58 -05:00
|
|
|
serializer_class = serializers.ServiceSerializer
|
2021-04-29 16:38:56 -04:00
|
|
|
filterset_class = filtersets.ServiceFilterSet
|