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

158 lines
3.9 KiB
Python
Raw Normal View History

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 *
from netbox.api.views import ModelViewSet
from utilities.utils import count_related
from . import mixins, serializers
2016-03-01 11:23:03 -05:00
class IPAMRootView(APIRootView):
"""
IPAM API root view
"""
def get_view_name(self):
return 'IPAM'
2016-07-15 13:26:54 -04:00
#
# VRFs
#
class VRFViewSet(CustomFieldModelViewSet):
queryset = VRF.objects.prefetch_related('tenant').prefetch_related(
'import_targets', 'export_targets', 'tags'
).annotate(
ipaddress_count=count_related(IPAddress, 'vrf'),
prefix_count=count_related(Prefix, 'vrf')
)
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
#
class RIRViewSet(CustomFieldModelViewSet):
queryset = RIR.objects.annotate(
aggregate_count=count_related(Aggregate, 'rir')
)
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
#
class AggregateViewSet(CustomFieldModelViewSet):
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
#
# Roles
#
class RoleViewSet(CustomFieldModelViewSet):
queryset = Role.objects.annotate(
prefix_count=count_related(Prefix, 'role'),
vlan_count=count_related(VLAN, 'role')
)
serializer_class = serializers.RoleSerializer
2021-04-29 16:38:56 -04:00
filterset_class = filtersets.RoleFilterSet
2016-07-15 13:26:54 -04:00
#
# Prefixes
#
class PrefixViewSet(mixins.AvailableIPsMixin, mixins.AvailablePrefixesMixin, CustomFieldModelViewSet):
queryset = Prefix.objects.prefetch_related(
'site', 'vrf__tenant', 'tenant', 'vlan', 'role', 'tags'
)
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
parent_model = Prefix # AvailableIPsMixin
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
#
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
parent_model = IPRange # AvailableIPsMixin
2021-07-16 09:15:19 -04:00
2016-07-15 13:26:54 -04:00
#
# IP addresses
#
class IPAddressViewSet(CustomFieldModelViewSet):
queryset = IPAddress.objects.prefetch_related(
2020-09-04 16:09:05 -04:00
'vrf__tenant', 'tenant', 'nat_inside', 'nat_outside', 'tags', 'assigned_object'
)
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
#
class VLANGroupViewSet(CustomFieldModelViewSet):
2021-03-09 14:13:50 -05:00
queryset = VLANGroup.objects.annotate(
vlan_count=count_related(VLAN, 'group')
)
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
#
class VLANViewSet(CustomFieldModelViewSet):
queryset = VLAN.objects.prefetch_related(
'site', 'group', 'tenant', 'role', 'tags'
).annotate(
prefix_count=count_related(Prefix, 'vlan')
)
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
#
# Services
#
class ServiceViewSet(ModelViewSet):
2020-06-29 11:35:13 -04:00
queryset = Service.objects.prefetch_related(
'device', 'virtual_machine', 'tags', 'ipaddresses'
2020-06-29 11:35:13 -04:00
)
serializer_class = serializers.ServiceSerializer
2021-04-29 16:38:56 -04:00
filterset_class = filtersets.ServiceFilterSet