Implement REST API

This commit is contained in:
jeremystretch 2022-03-16 13:37:47 -04:00
parent 2f1b2be39d
commit 17950faa87
4 changed files with 92 additions and 0 deletions

View File

View File

@ -0,0 +1,58 @@
from rest_framework import serializers
from ipam.api.serializers import NestedPrefixSerializer
from netbox.api.serializers import NetBoxModelSerializer, WritableNestedSerializer
from ..models import AccessList, AccessListRule
#
# Nested serializers
#
class NestedAccessListSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='plugins-api:netbox_access_lists-api:accesslist-detail')
class Meta:
model = AccessList
fields = ('id', 'url', 'display', 'name')
class NestedAccessListRuleSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='plugins-api:netbox_access_lists-api:accesslistrule-detail')
class Meta:
model = AccessListRule
fields = ('id', 'url', 'display', 'index')
#
# Regular serializers
#
class AccessListSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='plugins-api:netbox_access_lists-api:accesslist-detail'
)
rule_count = serializers.IntegerField(read_only=True)
class Meta:
model = AccessList
fields = (
'id', 'url', 'display', 'name', 'default_action', 'comments', 'tags', 'custom_fields', 'created',
'last_updated', 'rule_count',
)
class AccessListRuleSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='plugins-api:netbox_access_lists-api:accesslistrule-detail')
access_list = NestedAccessListSerializer()
source_prefix = NestedPrefixSerializer()
destination_prefix = NestedPrefixSerializer()
class Meta:
model = AccessListRule
fields = (
'id', 'url', 'display', 'access_list', 'index', 'protocol', 'source_prefix', 'source_ports',
'destination_prefix', 'destination_ports', 'action', 'tags', 'custom_fields', 'created', 'last_updated',
)

View File

@ -0,0 +1,12 @@
from netbox.api.routers import NetBoxRouter
from . import views
app_name = 'netbox_access_list'
router = NetBoxRouter()
router.register('access-lists', views.AccessListViewSet)
router.register('access-list-rules', views.AccessListRuleViewSet)
urlpatterns = router.urls

View File

@ -0,0 +1,22 @@
from django.db.models import Count
from netbox.api.viewsets import NetBoxModelViewSet
from .. import filtersets, models
from .serializers import AccessListSerializer, AccessListRuleSerializer
class AccessListViewSet(NetBoxModelViewSet):
queryset = models.AccessList.objects.prefetch_related('tags').annotate(
rule_count=Count('rules')
)
serializer_class = AccessListSerializer
class AccessListRuleViewSet(NetBoxModelViewSet):
queryset = models.AccessListRule.objects.prefetch_related(
'access_list', 'source_prefix', 'destination_prefix', 'tags'
)
serializer_class = AccessListRuleSerializer
filterset_class = filtersets.AccessListRuleFilterSet