2023-03-30 11:32:59 -07:00
|
|
|
from drf_spectacular.utils import extend_schema_serializer
|
2018-11-12 11:36:44 -05:00
|
|
|
from rest_framework import serializers
|
|
|
|
|
2020-06-05 15:48:36 -04:00
|
|
|
from ipam import models
|
2022-06-27 23:24:50 -05:00
|
|
|
from ipam.models.l2vpn import L2VPNTermination, L2VPN
|
2022-07-13 16:18:55 -04:00
|
|
|
from netbox.api.serializers import WritableNestedSerializer
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
__all__ = [
|
|
|
|
'NestedAggregateSerializer',
|
2021-10-24 23:42:47 -05:00
|
|
|
'NestedASNSerializer',
|
2023-02-27 16:36:05 -05:00
|
|
|
'NestedASNRangeSerializer',
|
2021-11-01 16:14:44 -04:00
|
|
|
'NestedFHRPGroupSerializer',
|
2021-11-04 11:15:34 -04:00
|
|
|
'NestedFHRPGroupAssignmentSerializer',
|
2018-11-12 11:36:44 -05:00
|
|
|
'NestedIPAddressSerializer',
|
2021-07-16 09:15:19 -04:00
|
|
|
'NestedIPRangeSerializer',
|
2022-06-29 16:01:20 -05:00
|
|
|
'NestedL2VPNSerializer',
|
|
|
|
'NestedL2VPNTerminationSerializer',
|
2018-11-12 11:36:44 -05:00
|
|
|
'NestedPrefixSerializer',
|
|
|
|
'NestedRIRSerializer',
|
|
|
|
'NestedRoleSerializer',
|
2020-09-24 11:25:52 -04:00
|
|
|
'NestedRouteTargetSerializer',
|
2020-06-05 15:48:36 -04:00
|
|
|
'NestedServiceSerializer',
|
2022-01-12 16:42:28 -05:00
|
|
|
'NestedServiceTemplateSerializer',
|
2018-11-12 11:36:44 -05:00
|
|
|
'NestedVLANGroupSerializer',
|
|
|
|
'NestedVLANSerializer',
|
|
|
|
'NestedVRFSerializer',
|
|
|
|
]
|
|
|
|
|
|
|
|
|
2023-02-27 16:36:05 -05:00
|
|
|
#
|
|
|
|
# ASN ranges
|
|
|
|
#
|
|
|
|
|
|
|
|
class NestedASNRangeSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:asnrange-detail')
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = models.ASNRange
|
|
|
|
fields = ['id', 'url', 'display', 'name']
|
|
|
|
|
|
|
|
|
2021-10-24 23:42:47 -05:00
|
|
|
#
|
|
|
|
# ASNs
|
|
|
|
#
|
|
|
|
|
|
|
|
class NestedASNSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:asn-detail')
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = models.ASN
|
|
|
|
fields = ['id', 'url', 'display', 'asn']
|
|
|
|
|
|
|
|
|
2018-11-12 11:36:44 -05:00
|
|
|
#
|
|
|
|
# VRFs
|
|
|
|
#
|
|
|
|
|
2023-03-30 11:32:59 -07:00
|
|
|
@extend_schema_serializer(
|
|
|
|
exclude_fields=('prefix_count',),
|
|
|
|
)
|
2018-11-12 11:36:44 -05:00
|
|
|
class NestedVRFSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vrf-detail')
|
2019-04-12 17:07:56 -04:00
|
|
|
prefix_count = serializers.IntegerField(read_only=True)
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
class Meta:
|
2020-06-05 15:48:36 -04:00
|
|
|
model = models.VRF
|
2021-05-04 15:56:36 -04:00
|
|
|
fields = ['id', 'url', 'display', 'name', 'rd', 'prefix_count']
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
|
2020-09-24 11:25:52 -04:00
|
|
|
#
|
|
|
|
# Route targets
|
|
|
|
#
|
|
|
|
|
|
|
|
class NestedRouteTargetSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:routetarget-detail')
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = models.RouteTarget
|
2021-03-16 10:06:25 -04:00
|
|
|
fields = ['id', 'url', 'display', 'name']
|
2020-09-24 11:25:52 -04:00
|
|
|
|
|
|
|
|
2018-11-12 11:36:44 -05:00
|
|
|
#
|
|
|
|
# RIRs/aggregates
|
|
|
|
#
|
|
|
|
|
2023-03-30 11:32:59 -07:00
|
|
|
@extend_schema_serializer(
|
|
|
|
exclude_fields=('aggregate_count',),
|
|
|
|
)
|
2018-11-12 11:36:44 -05:00
|
|
|
class NestedRIRSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:rir-detail')
|
2019-04-12 17:07:56 -04:00
|
|
|
aggregate_count = serializers.IntegerField(read_only=True)
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
class Meta:
|
2020-06-05 15:48:36 -04:00
|
|
|
model = models.RIR
|
2021-03-16 10:06:25 -04:00
|
|
|
fields = ['id', 'url', 'display', 'name', 'slug', 'aggregate_count']
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
|
|
|
|
class NestedAggregateSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:aggregate-detail')
|
2020-07-13 14:50:58 -04:00
|
|
|
family = serializers.IntegerField(read_only=True)
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
class Meta:
|
2020-06-05 15:48:36 -04:00
|
|
|
model = models.Aggregate
|
2021-03-16 10:06:25 -04:00
|
|
|
fields = ['id', 'url', 'display', 'family', 'prefix']
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
|
2021-11-01 16:14:44 -04:00
|
|
|
#
|
|
|
|
# FHRP groups
|
|
|
|
#
|
|
|
|
|
|
|
|
class NestedFHRPGroupSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:fhrpgroup-detail')
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = models.FHRPGroup
|
|
|
|
fields = ['id', 'url', 'display', 'protocol', 'group_id']
|
|
|
|
|
|
|
|
|
2021-11-04 09:58:33 -04:00
|
|
|
class NestedFHRPGroupAssignmentSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:fhrpgroupassignment-detail')
|
|
|
|
|
2021-11-04 11:15:34 -04:00
|
|
|
class Meta:
|
|
|
|
model = models.FHRPGroupAssignment
|
|
|
|
fields = ['id', 'url', 'display', 'interface_type', 'interface_id', 'group_id', 'priority']
|
|
|
|
|
2021-11-04 09:58:33 -04:00
|
|
|
|
2018-11-12 11:36:44 -05:00
|
|
|
#
|
|
|
|
# VLANs
|
|
|
|
#
|
|
|
|
|
2023-03-30 11:32:59 -07:00
|
|
|
@extend_schema_serializer(
|
|
|
|
exclude_fields=('prefix_count', 'vlan_count'),
|
|
|
|
)
|
2018-11-12 11:36:44 -05:00
|
|
|
class NestedRoleSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:role-detail')
|
2019-04-12 17:07:56 -04:00
|
|
|
prefix_count = serializers.IntegerField(read_only=True)
|
|
|
|
vlan_count = serializers.IntegerField(read_only=True)
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
class Meta:
|
2020-06-05 15:48:36 -04:00
|
|
|
model = models.Role
|
2021-03-16 10:06:25 -04:00
|
|
|
fields = ['id', 'url', 'display', 'name', 'slug', 'prefix_count', 'vlan_count']
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
|
2023-03-30 11:32:59 -07:00
|
|
|
@extend_schema_serializer(
|
|
|
|
exclude_fields=('vlan_count',),
|
|
|
|
)
|
2018-11-12 11:36:44 -05:00
|
|
|
class NestedVLANGroupSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlangroup-detail')
|
2019-04-12 17:07:56 -04:00
|
|
|
vlan_count = serializers.IntegerField(read_only=True)
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
class Meta:
|
2020-06-05 15:48:36 -04:00
|
|
|
model = models.VLANGroup
|
2021-03-16 10:06:25 -04:00
|
|
|
fields = ['id', 'url', 'display', 'name', 'slug', 'vlan_count']
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
|
|
|
|
class NestedVLANSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlan-detail')
|
|
|
|
|
|
|
|
class Meta:
|
2020-06-05 15:48:36 -04:00
|
|
|
model = models.VLAN
|
2021-05-04 15:56:36 -04:00
|
|
|
fields = ['id', 'url', 'display', 'vid', 'name']
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Prefixes
|
|
|
|
#
|
|
|
|
|
|
|
|
class NestedPrefixSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:prefix-detail')
|
2020-07-13 14:50:58 -04:00
|
|
|
family = serializers.IntegerField(read_only=True)
|
2021-05-28 08:56:55 -04:00
|
|
|
_depth = serializers.IntegerField(read_only=True)
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
class Meta:
|
2020-06-05 15:48:36 -04:00
|
|
|
model = models.Prefix
|
2021-05-28 08:56:55 -04:00
|
|
|
fields = ['id', 'url', 'display', 'family', 'prefix', '_depth']
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
|
2021-07-16 09:15:19 -04:00
|
|
|
#
|
|
|
|
# IP ranges
|
|
|
|
#
|
|
|
|
|
|
|
|
class NestedIPRangeSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:iprange-detail')
|
|
|
|
family = serializers.IntegerField(read_only=True)
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = models.IPRange
|
|
|
|
fields = ['id', 'url', 'display', 'family', 'start_address', 'end_address']
|
|
|
|
|
|
|
|
|
2018-11-12 11:36:44 -05:00
|
|
|
#
|
|
|
|
# IP addresses
|
|
|
|
#
|
|
|
|
|
|
|
|
class NestedIPAddressSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
|
2020-07-13 14:50:58 -04:00
|
|
|
family = serializers.IntegerField(read_only=True)
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
class Meta:
|
2020-06-05 15:48:36 -04:00
|
|
|
model = models.IPAddress
|
2021-03-16 10:06:25 -04:00
|
|
|
fields = ['id', 'url', 'display', 'family', 'address']
|
2020-06-05 15:48:36 -04:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Services
|
|
|
|
#
|
|
|
|
|
2022-01-12 16:42:28 -05:00
|
|
|
class NestedServiceTemplateSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:servicetemplate-detail')
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = models.ServiceTemplate
|
|
|
|
fields = ['id', 'url', 'display', 'name', 'protocol', 'ports']
|
|
|
|
|
|
|
|
|
2020-06-05 15:48:36 -04:00
|
|
|
class NestedServiceSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:service-detail')
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = models.Service
|
2021-03-16 10:06:25 -04:00
|
|
|
fields = ['id', 'url', 'display', 'name', 'protocol', 'ports']
|
2022-06-27 23:24:50 -05:00
|
|
|
|
|
|
|
#
|
2022-07-06 08:02:44 -05:00
|
|
|
# L2VPN
|
2022-06-27 23:24:50 -05:00
|
|
|
#
|
|
|
|
|
|
|
|
|
|
|
|
class NestedL2VPNSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:l2vpn-detail')
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = L2VPN
|
|
|
|
fields = [
|
2022-06-29 16:01:20 -05:00
|
|
|
'id', 'url', 'display', 'identifier', 'name', 'slug', 'type'
|
2022-06-27 23:24:50 -05:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
class NestedL2VPNTerminationSerializer(WritableNestedSerializer):
|
2022-06-29 16:01:20 -05:00
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:l2vpntermination-detail')
|
2022-06-27 23:24:50 -05:00
|
|
|
l2vpn = NestedL2VPNSerializer()
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = L2VPNTermination
|
|
|
|
fields = [
|
2022-06-29 16:01:20 -05:00
|
|
|
'id', 'url', 'display', 'l2vpn'
|
2022-06-27 23:24:50 -05:00
|
|
|
]
|