mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
#9816: Add TunnelGroup
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
from drf_spectacular.utils import extend_schema_serializer
|
||||
from rest_framework import serializers
|
||||
|
||||
from netbox.api.serializers import WritableNestedSerializer
|
||||
@@ -11,11 +12,24 @@ __all__ = (
|
||||
'NestedIPSecProposalSerializer',
|
||||
'NestedL2VPNSerializer',
|
||||
'NestedL2VPNTerminationSerializer',
|
||||
'NestedTunnelGroupSerializer',
|
||||
'NestedTunnelSerializer',
|
||||
'NestedTunnelTerminationSerializer',
|
||||
)
|
||||
|
||||
|
||||
@extend_schema_serializer(
|
||||
exclude_fields=('tunnel_count',),
|
||||
)
|
||||
class NestedTunnelGroupSerializer(WritableNestedSerializer):
|
||||
url = serializers.HyperlinkedIdentityField(view_name='vpn-api:tunnelgroup-detail')
|
||||
tunnel_count = serializers.IntegerField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = models.TunnelGroup
|
||||
fields = ['id', 'url', 'display', 'name', 'slug', 'tunnel_count']
|
||||
|
||||
|
||||
class NestedTunnelSerializer(WritableNestedSerializer):
|
||||
url = serializers.HyperlinkedIdentityField(
|
||||
view_name='vpn-api:tunnel-detail'
|
||||
|
@@ -21,11 +21,24 @@ __all__ = (
|
||||
'IPSecProposalSerializer',
|
||||
'L2VPNSerializer',
|
||||
'L2VPNTerminationSerializer',
|
||||
'TunnelGroupSerializer',
|
||||
'TunnelSerializer',
|
||||
'TunnelTerminationSerializer',
|
||||
)
|
||||
|
||||
|
||||
class TunnelGroupSerializer(NetBoxModelSerializer):
|
||||
url = serializers.HyperlinkedIdentityField(view_name='vpn-api:tunnelgroup-detail')
|
||||
tunnel_count = serializers.IntegerField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = TunnelGroup
|
||||
fields = [
|
||||
'id', 'url', 'display', 'name', 'slug', 'description', 'tags', 'custom_fields', 'created', 'last_updated',
|
||||
'tunnel_count',
|
||||
]
|
||||
|
||||
|
||||
class TunnelSerializer(NetBoxModelSerializer):
|
||||
url = serializers.HyperlinkedIdentityField(
|
||||
view_name='vpn-api:tunnel-detail'
|
||||
@@ -33,6 +46,7 @@ class TunnelSerializer(NetBoxModelSerializer):
|
||||
status = ChoiceField(
|
||||
choices=TunnelStatusChoices
|
||||
)
|
||||
group = NestedTunnelGroupSerializer()
|
||||
encapsulation = ChoiceField(
|
||||
choices=TunnelEncapsulationChoices
|
||||
)
|
||||
@@ -48,7 +62,7 @@ class TunnelSerializer(NetBoxModelSerializer):
|
||||
class Meta:
|
||||
model = Tunnel
|
||||
fields = (
|
||||
'id', 'url', 'display', 'name', 'status', 'encapsulation', 'ipsec_profile', 'tenant', 'tunnel_id',
|
||||
'id', 'url', 'display', 'name', 'status', 'group', 'encapsulation', 'ipsec_profile', 'tenant', 'tunnel_id',
|
||||
'description', 'comments', 'tags', 'custom_fields', 'created', 'last_updated',
|
||||
)
|
||||
|
||||
|
@@ -8,6 +8,7 @@ router.register('ike-proposals', views.IKEProposalViewSet)
|
||||
router.register('ipsec-policies', views.IPSecPolicyViewSet)
|
||||
router.register('ipsec-proposals', views.IPSecProposalViewSet)
|
||||
router.register('ipsec-profiles', views.IPSecProfileViewSet)
|
||||
router.register('tunnel-groups', views.TunnelGroupViewSet)
|
||||
router.register('tunnels', views.TunnelViewSet)
|
||||
router.register('tunnel-terminations', views.TunnelTerminationViewSet)
|
||||
router.register('l2vpns', views.L2VPNViewSet)
|
||||
|
@@ -14,6 +14,7 @@ __all__ = (
|
||||
'IPSecProposalViewSet',
|
||||
'L2VPNViewSet',
|
||||
'L2VPNTerminationViewSet',
|
||||
'TunnelGroupViewSet',
|
||||
'TunnelTerminationViewSet',
|
||||
'TunnelViewSet',
|
||||
'VPNRootView',
|
||||
@@ -32,6 +33,14 @@ class VPNRootView(APIRootView):
|
||||
# Viewsets
|
||||
#
|
||||
|
||||
class TunnelGroupViewSet(NetBoxModelViewSet):
|
||||
queryset = TunnelGroup.objects.annotate(
|
||||
tunnel_count=count_related(Tunnel, 'group')
|
||||
)
|
||||
serializer_class = serializers.TunnelGroupSerializer
|
||||
filterset_class = filtersets.TunnelGroupFilterSet
|
||||
|
||||
|
||||
class TunnelViewSet(NetBoxModelViewSet):
|
||||
queryset = Tunnel.objects.prefetch_related('ipsec_profile', 'tenant').annotate(
|
||||
terminations_count=count_related(TunnelTermination, 'tunnel')
|
||||
|
Reference in New Issue
Block a user