Coverage for vpn/api/serializers_/tunnels.py: 100%
37 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from django.contrib.contenttypes.models import ContentType
3from ipam.api.serializers_.ip import IPAddressSerializer
4from netbox.api.fields import ChoiceField, ContentTypeField, RelatedObjectCountField
5from netbox.api.gfk_fields import GFKSerializerField
6from netbox.api.serializers import NetBoxModelSerializer, OrganizationalModelSerializer, PrimaryModelSerializer
7from tenancy.api.serializers_.tenants import TenantSerializer
8from vpn.choices import *
9from vpn.models import Tunnel, TunnelGroup, TunnelTermination
11from .crypto import IPSecProfileSerializer
13__all__ = (
14 'TunnelGroupSerializer',
15 'TunnelSerializer',
16 'TunnelTerminationSerializer',
17)
20#
21# Tunnels
22#
24class TunnelGroupSerializer(OrganizationalModelSerializer):
26 # Related object counts
27 tunnel_count = RelatedObjectCountField('tunnels')
29 class Meta:
30 model = TunnelGroup
31 fields = [
32 'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'owner', 'comments', 'tags',
33 'custom_fields', 'created', 'last_updated', 'tunnel_count',
34 ]
35 brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'tunnel_count')
38class TunnelSerializer(PrimaryModelSerializer):
39 status = ChoiceField(
40 choices=TunnelStatusChoices
41 )
42 group = TunnelGroupSerializer(
43 nested=True,
44 required=False,
45 allow_null=True,
46 default=None
47 )
48 encapsulation = ChoiceField(
49 choices=TunnelEncapsulationChoices
50 )
51 ipsec_profile = IPSecProfileSerializer(
52 nested=True,
53 required=False,
54 allow_null=True
55 )
56 tenant = TenantSerializer(
57 nested=True,
58 required=False,
59 allow_null=True
60 )
62 # Related object counts
63 terminations_count = RelatedObjectCountField('terminations')
65 class Meta:
66 model = Tunnel
67 fields = (
68 'id', 'url', 'display_url', 'display', 'name', 'status', 'group', 'encapsulation', 'ipsec_profile',
69 'tenant', 'tunnel_id', 'description', 'owner', 'comments', 'tags', 'custom_fields', 'created',
70 'last_updated', 'terminations_count',
71 )
72 brief_fields = ('id', 'url', 'display', 'name', 'description')
75class TunnelTerminationSerializer(NetBoxModelSerializer):
76 tunnel = TunnelSerializer(
77 nested=True
78 )
79 role = ChoiceField(
80 choices=TunnelTerminationRoleChoices
81 )
82 termination_type = ContentTypeField(
83 queryset=ContentType.objects.all()
84 )
85 termination = GFKSerializerField(read_only=True)
86 outside_ip = IPAddressSerializer(
87 nested=True,
88 required=False,
89 allow_null=True
90 )
92 class Meta:
93 model = TunnelTermination
94 fields = (
95 'id', 'url', 'display_url', 'display', 'tunnel', 'role', 'termination_type', 'termination_id',
96 'termination', 'outside_ip', 'tags', 'custom_fields', 'created', 'last_updated',
97 )
98 brief_fields = ('id', 'url', 'display')