1
0
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:
Jeremy Stretch
2023-12-04 15:44:52 -05:00
parent 9f1283f0fa
commit 8db1093fdc
26 changed files with 669 additions and 160 deletions

View File

@@ -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'

View File

@@ -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',
)

View File

@@ -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)

View File

@@ -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')