diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index 7fcab6ba3..baf3de67f 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -1135,3 +1135,25 @@ class PowerFeedSerializer(NetBoxModelSerializer, LinkTerminationSerializer, Conn 'connected_endpoint', 'connected_endpoint_type', 'connected_endpoint_reachable', 'tags', 'custom_fields', 'created', 'last_updated', '_occupied', ] + + + + +class SimpleDeviceSerializer(NetBoxModelSerializer): + + tenant = NestedTenantSerializer(required=False, allow_null=True, default=None) + site = NestedSiteSerializer() + location = NestedLocationSerializer(required=False, allow_null=True, default=None) + rack = NestedRackSerializer(required=False, allow_null=True, default=None) + face = ChoiceField(choices=DeviceFaceChoices, allow_blank=True, default='') + position = serializers.IntegerField(allow_null=True, label='Position (U)', min_value=1, default=None) + status = ChoiceField(choices=DeviceStatusChoices, required=False) + primary_ip = NestedIPAddressSerializer(read_only=True) + primary_ip4 = NestedIPAddressSerializer(required=False, allow_null=True) + primary_ip6 = NestedIPAddressSerializer(required=False, allow_null=True) + class Meta: + model = Device + fields = [ + 'id', 'name', 'tenant', 'site', 'location', 'rack', 'face', + 'position', 'status', 'primary_ip', 'primary_ip4', 'primary_ip6' + ] \ No newline at end of file diff --git a/netbox/dcim/api/urls.py b/netbox/dcim/api/urls.py index f67d241d5..5a110fca3 100644 --- a/netbox/dcim/api/urls.py +++ b/netbox/dcim/api/urls.py @@ -37,6 +37,7 @@ router.register('inventory-item-templates', views.InventoryItemTemplateViewSet) router.register('device-roles', views.DeviceRoleViewSet) router.register('platforms', views.PlatformViewSet) router.register('devices', views.DeviceViewSet) +router.register('simple-devices', views.SimpleDeviceViewSet) router.register('modules', views.ModuleViewSet) # Device components diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index e99ef333a..3c80d4579 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -759,3 +759,16 @@ class ConnectedDeviceViewSet(ViewSet): # Connected endpoint is none or not an Interface raise Http404 + + +# +# Devices/modules +# + +class SimpleDeviceViewSet(ConfigContextQuerySetMixin, NetBoxModelViewSet): + queryset = Device.objects.prefetch_related( + 'device_type__manufacturer', 'device_role', 'tenant', 'platform', 'site', 'location', 'rack', 'parent_bay', + 'virtual_chassis__master', 'primary_ip4__nat_outside', 'primary_ip6__nat_outside', 'tags', + ) + filterset_class = filtersets.DeviceFilterSet + serializer_class = serializers.SimpleDeviceSerializer