mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-15 11:42:52 -06:00
Extended API to include DeviceBays
This commit is contained in:
parent
7eae636562
commit
97fbfeecc3
@ -2,9 +2,9 @@ from rest_framework import serializers
|
|||||||
|
|
||||||
from ipam.models import IPAddress
|
from ipam.models import IPAddress
|
||||||
from dcim.models import (
|
from dcim.models import (
|
||||||
ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceType, DeviceRole,
|
ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay, DeviceType,
|
||||||
Interface, InterfaceConnection, InterfaceTemplate, Manufacturer, Platform, PowerOutlet, PowerOutletTemplate,
|
DeviceRole, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer, Platform, PowerOutlet,
|
||||||
PowerPort, PowerPortTemplate, Rack, RackGroup, RACK_FACE_FRONT, RACK_FACE_REAR, Site,
|
PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, RACK_FACE_FRONT, RACK_FACE_REAR, Site,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -228,9 +228,9 @@ class DeviceSerializer(serializers.ModelSerializer):
|
|||||||
'face', 'status', 'primary_ip', 'comments']
|
'face', 'status', 'primary_ip', 'comments']
|
||||||
|
|
||||||
|
|
||||||
class DeviceNestedSerializer(DeviceSerializer):
|
class DeviceNestedSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
class Meta(DeviceSerializer.Meta):
|
class Meta:
|
||||||
model = Device
|
model = Device
|
||||||
fields = ['id', 'name', 'display_name']
|
fields = ['id', 'name', 'display_name']
|
||||||
|
|
||||||
@ -337,6 +337,32 @@ class InterfaceDetailSerializer(InterfaceSerializer):
|
|||||||
'connected_interface']
|
'connected_interface']
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Device bays
|
||||||
|
#
|
||||||
|
|
||||||
|
class DeviceBaySerializer(serializers.ModelSerializer):
|
||||||
|
device = DeviceNestedSerializer()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = DeviceBay
|
||||||
|
fields = ['id', 'device', 'name']
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceBayNestedSerializer(DeviceBaySerializer):
|
||||||
|
installed_device = DeviceNestedSerializer()
|
||||||
|
|
||||||
|
class Meta(DeviceBaySerializer.Meta):
|
||||||
|
fields = ['id', 'name', 'installed_device']
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceBayDetailSerializer(DeviceBaySerializer):
|
||||||
|
installed_device = DeviceNestedSerializer()
|
||||||
|
|
||||||
|
class Meta(DeviceBaySerializer.Meta):
|
||||||
|
fields = ['id', 'device', 'name', 'installed_device']
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Interface connections
|
# Interface connections
|
||||||
#
|
#
|
||||||
|
@ -49,6 +49,7 @@ urlpatterns = [
|
|||||||
url(r'^devices/(?P<pk>\d+)/power-ports/$', PowerPortListView.as_view(), name='device_powerports'),
|
url(r'^devices/(?P<pk>\d+)/power-ports/$', PowerPortListView.as_view(), name='device_powerports'),
|
||||||
url(r'^devices/(?P<pk>\d+)/power-outlets/$', PowerOutletListView.as_view(), name='device_poweroutlets'),
|
url(r'^devices/(?P<pk>\d+)/power-outlets/$', PowerOutletListView.as_view(), name='device_poweroutlets'),
|
||||||
url(r'^devices/(?P<pk>\d+)/interfaces/$', InterfaceListView.as_view(), name='device_interfaces'),
|
url(r'^devices/(?P<pk>\d+)/interfaces/$', InterfaceListView.as_view(), name='device_interfaces'),
|
||||||
|
url(r'^devices/(?P<pk>\d+)/device-bays/$', DeviceBayListView.as_view(), name='device_devicebays'),
|
||||||
|
|
||||||
# Console ports
|
# Console ports
|
||||||
url(r'^console-ports/(?P<pk>\d+)/$', ConsolePortView.as_view(), name='consoleport'),
|
url(r'^console-ports/(?P<pk>\d+)/$', ConsolePortView.as_view(), name='consoleport'),
|
||||||
|
@ -9,8 +9,8 @@ from django.http import Http404
|
|||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
from dcim.models import (
|
from dcim.models import (
|
||||||
ConsolePort, ConsoleServerPort, Device, DeviceRole, DeviceType, IFACE_FF_VIRTUAL, Interface, InterfaceConnection,
|
ConsolePort, ConsoleServerPort, Device, DeviceBay, DeviceRole, DeviceType, IFACE_FF_VIRTUAL, Interface,
|
||||||
Manufacturer, Platform, PowerOutlet, PowerPort, Rack, RackGroup, Site,
|
InterfaceConnection, Manufacturer, Platform, PowerOutlet, PowerPort, Rack, RackGroup, Site,
|
||||||
)
|
)
|
||||||
from dcim import filters
|
from dcim import filters
|
||||||
from .exceptions import MissingFilterException
|
from .exceptions import MissingFilterException
|
||||||
@ -326,6 +326,33 @@ class InterfaceConnectionView(generics.RetrieveUpdateDestroyAPIView):
|
|||||||
queryset = InterfaceConnection.objects.all()
|
queryset = InterfaceConnection.objects.all()
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Device bays
|
||||||
|
#
|
||||||
|
|
||||||
|
class DeviceBayListView(generics.ListAPIView):
|
||||||
|
"""
|
||||||
|
List device bays (by device)
|
||||||
|
"""
|
||||||
|
serializer_class = serializers.DeviceBayNestedSerializer
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
|
||||||
|
device = get_object_or_404(Device, pk=self.kwargs['pk'])
|
||||||
|
queryset = DeviceBay.objects.filter(device=device).select_related('installed_device')
|
||||||
|
|
||||||
|
# Filter by type (physical or virtual)
|
||||||
|
iface_type = self.request.query_params.get('type')
|
||||||
|
if iface_type == 'physical':
|
||||||
|
queryset = queryset.exclude(form_factor=IFACE_FF_VIRTUAL)
|
||||||
|
elif iface_type == 'virtual':
|
||||||
|
queryset = queryset.filter(form_factor=IFACE_FF_VIRTUAL)
|
||||||
|
elif iface_type is not None:
|
||||||
|
queryset = queryset.empty()
|
||||||
|
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Live queries
|
# Live queries
|
||||||
#
|
#
|
||||||
|
Loading…
Reference in New Issue
Block a user