mirror of
https://github.com/lucaspalomodevelop/netbox-acls.git
synced 2026-03-12 23:27:23 +00:00
Implement REST API
This commit is contained in:
parent
2f1b2be39d
commit
17950faa87
0
netbox_access_lists/api/__init__.py
Normal file
0
netbox_access_lists/api/__init__.py
Normal file
58
netbox_access_lists/api/serializers.py
Normal file
58
netbox_access_lists/api/serializers.py
Normal 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',
|
||||
)
|
||||
|
||||
12
netbox_access_lists/api/urls.py
Normal file
12
netbox_access_lists/api/urls.py
Normal 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
|
||||
|
||||
22
netbox_access_lists/api/views.py
Normal file
22
netbox_access_lists/api/views.py
Normal 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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user