mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Extended DCIM API to include a device modules list
This commit is contained in:
@ -3,7 +3,7 @@ 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, DeviceBay, DeviceType,
|
ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay, DeviceType,
|
||||||
DeviceRole, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer, Platform, PowerOutlet,
|
DeviceRole, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer, Module, Platform, PowerOutlet,
|
||||||
PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, RACK_FACE_FRONT, RACK_FACE_REAR, Site,
|
PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, RACK_FACE_FRONT, RACK_FACE_REAR, Site,
|
||||||
)
|
)
|
||||||
from tenancy.api.serializers import TenantNestedSerializer
|
from tenancy.api.serializers import TenantNestedSerializer
|
||||||
@ -385,6 +385,25 @@ class DeviceBayDetailSerializer(DeviceBaySerializer):
|
|||||||
fields = ['id', 'device', 'name', 'installed_device']
|
fields = ['id', 'device', 'name', 'installed_device']
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Modules
|
||||||
|
#
|
||||||
|
|
||||||
|
class ModuleSerializer(serializers.ModelSerializer):
|
||||||
|
device = DeviceNestedSerializer()
|
||||||
|
manufacturer = ManufacturerNestedSerializer()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Module
|
||||||
|
fields = ['id', 'device', 'parent', 'name', 'manufacturer', 'part_id', 'serial', 'discovered']
|
||||||
|
|
||||||
|
|
||||||
|
class ModuleNestedSerializer(ModuleSerializer):
|
||||||
|
|
||||||
|
class Meta(ModuleSerializer.Meta):
|
||||||
|
fields = ['id', 'device', 'parent', 'name']
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Interface connections
|
# Interface connections
|
||||||
#
|
#
|
||||||
|
@ -50,6 +50,7 @@ urlpatterns = [
|
|||||||
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'),
|
url(r'^devices/(?P<pk>\d+)/device-bays/$', DeviceBayListView.as_view(), name='device_devicebays'),
|
||||||
|
url(r'^devices/(?P<pk>\d+)/modules/$', ModuleListView.as_view(), name='device_modules'),
|
||||||
|
|
||||||
# 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'),
|
||||||
|
@ -10,7 +10,7 @@ from django.shortcuts import get_object_or_404
|
|||||||
|
|
||||||
from dcim.models import (
|
from dcim.models import (
|
||||||
ConsolePort, ConsoleServerPort, Device, DeviceBay, DeviceRole, DeviceType, IFACE_FF_VIRTUAL, Interface,
|
ConsolePort, ConsoleServerPort, Device, DeviceBay, DeviceRole, DeviceType, IFACE_FF_VIRTUAL, Interface,
|
||||||
InterfaceConnection, Manufacturer, Platform, PowerOutlet, PowerPort, Rack, RackGroup, Site,
|
InterfaceConnection, Manufacturer, Module, Platform, PowerOutlet, PowerPort, Rack, RackGroup, Site,
|
||||||
)
|
)
|
||||||
from dcim import filters
|
from dcim import filters
|
||||||
from .exceptions import MissingFilterException
|
from .exceptions import MissingFilterException
|
||||||
@ -349,18 +349,23 @@ class DeviceBayListView(generics.ListAPIView):
|
|||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
|
|
||||||
device = get_object_or_404(Device, pk=self.kwargs['pk'])
|
device = get_object_or_404(Device, pk=self.kwargs['pk'])
|
||||||
queryset = DeviceBay.objects.filter(device=device).select_related('installed_device')
|
return 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
|
#
|
||||||
|
# Modules
|
||||||
|
#
|
||||||
|
|
||||||
|
class ModuleListView(generics.ListAPIView):
|
||||||
|
"""
|
||||||
|
List device modules (by device)
|
||||||
|
"""
|
||||||
|
serializer_class = serializers.ModuleSerializer
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
|
||||||
|
device = get_object_or_404(Device, pk=self.kwargs['pk'])
|
||||||
|
return Module.objects.filter(device=device).select_related('device', 'manufacturer')
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
Reference in New Issue
Block a user