From 27856ecaea14f4b76c3c551eb0938ab9d7204102 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Thu, 10 Oct 2024 11:43:01 -0400 Subject: [PATCH] Add serializer classes to InterfaceSerializer --- .../dcim/api/serializers_/device_components.py | 5 +++-- netbox/ipam/api/serializers_/vlans.py | 16 +++++++++------- netbox/ipam/api/urls.py | 2 ++ netbox/ipam/api/views.py | 12 ++++++++++++ 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/netbox/dcim/api/serializers_/device_components.py b/netbox/dcim/api/serializers_/device_components.py index e285ce349..3be19bb58 100644 --- a/netbox/dcim/api/serializers_/device_components.py +++ b/netbox/dcim/api/serializers_/device_components.py @@ -8,7 +8,7 @@ from dcim.models import ( ConsolePort, ConsoleServerPort, DeviceBay, FrontPort, Interface, InventoryItem, ModuleBay, PowerOutlet, PowerPort, RearPort, VirtualDeviceContext, ) -from ipam.api.serializers_.vlans import VLANSerializer +from ipam.api.serializers_.vlans import VLANSerializer, VLANTranslationPolicySerializer from ipam.api.serializers_.vrfs import VRFSerializer from ipam.models import VLAN from netbox.api.fields import ChoiceField, ContentTypeField, SerializedPKRelatedField @@ -196,6 +196,7 @@ class InterfaceSerializer(NetBoxModelSerializer, CabledObjectSerializer, Connect required=False, many=True ) + vlan_translation_policy = VLANTranslationPolicySerializer(nested=True, required=False, allow_null=True) vrf = VRFSerializer(nested=True, required=False, allow_null=True) l2vpn_termination = L2VPNTerminationSerializer(nested=True, read_only=True, allow_null=True) wireless_link = NestedWirelessLinkSerializer(read_only=True, allow_null=True) @@ -225,7 +226,7 @@ class InterfaceSerializer(NetBoxModelSerializer, CabledObjectSerializer, Connect 'tx_power', 'untagged_vlan', 'tagged_vlans', 'mark_connected', 'cable', 'cable_end', 'wireless_link', 'link_peers', 'link_peers_type', 'wireless_lans', 'vrf', 'l2vpn_termination', 'connected_endpoints', 'connected_endpoints_type', 'connected_endpoints_reachable', 'tags', 'custom_fields', 'created', - 'last_updated', 'count_ipaddresses', 'count_fhrp_groups', '_occupied', + 'last_updated', 'count_ipaddresses', 'count_fhrp_groups', '_occupied', 'vlan_translation_policy' ] brief_fields = ('id', 'url', 'display', 'device', 'name', 'description', 'cable', '_occupied') diff --git a/netbox/ipam/api/serializers_/vlans.py b/netbox/ipam/api/serializers_/vlans.py index 95eb3d63d..3376a2e4a 100644 --- a/netbox/ipam/api/serializers_/vlans.py +++ b/netbox/ipam/api/serializers_/vlans.py @@ -114,15 +114,17 @@ class CreateAvailableVLANSerializer(NetBoxModelSerializer): return data -class VLANTranslationPolicySerializer(NetBoxModelSerializer): - - class Meta: - model = VLANTranslationPolicy - fields = ['name', 'description'] - - class VLANTranslationRuleSerializer(NetBoxModelSerializer): class Meta: model = VLANTranslationRule fields = ['policy', 'local_vid', 'remote_vid'] + + +class VLANTranslationPolicySerializer(NetBoxModelSerializer): + rules = VLANTranslationRuleSerializer(many=True, read_only=True) + + class Meta: + model = VLANTranslationPolicy + fields = ('id', 'name', 'description', 'rules') + brief_fields = ('id', 'rules') diff --git a/netbox/ipam/api/urls.py b/netbox/ipam/api/urls.py index bae9d8048..ea76025ec 100644 --- a/netbox/ipam/api/urls.py +++ b/netbox/ipam/api/urls.py @@ -21,6 +21,8 @@ router.register('fhrp-groups', views.FHRPGroupViewSet) router.register('fhrp-group-assignments', views.FHRPGroupAssignmentViewSet) router.register('vlan-groups', views.VLANGroupViewSet) router.register('vlans', views.VLANViewSet) +router.register('vlan-translation-policies', views.VLANTranslationPolicyViewSet) +router.register('vlan-translation-rules', views.VLANTranslationRuleViewSet) router.register('service-templates', views.ServiceTemplateViewSet) router.register('services', views.ServiceViewSet) diff --git a/netbox/ipam/api/views.py b/netbox/ipam/api/views.py index ffd4d5b7d..a77477989 100644 --- a/netbox/ipam/api/views.py +++ b/netbox/ipam/api/views.py @@ -143,6 +143,18 @@ class VLANViewSet(NetBoxModelViewSet): filterset_class = filtersets.VLANFilterSet +class VLANTranslationPolicyViewSet(NetBoxModelViewSet): + queryset = VLANTranslationPolicy.objects.prefetch_related('rules') + serializer_class = serializers.VLANTranslationPolicySerializer + filterset_class = filtersets.VLANTranslationPolicyFilterSet + + +class VLANTranslationRuleViewSet(NetBoxModelViewSet): + queryset = VLANTranslationRule.objects.all() + serializer_class = serializers.VLANTranslationRuleSerializer + filterset_class = filtersets.VLANTranslationRuleFilterSet + + class ServiceTemplateViewSet(NetBoxModelViewSet): queryset = ServiceTemplate.objects.all() serializer_class = serializers.ServiceTemplateSerializer