2016-03-01 11:23:03 -05:00
|
|
|
from rest_framework import serializers
|
|
|
|
|
|
|
|
from ipam.models import IPAddress
|
2016-05-18 16:02:53 -04:00
|
|
|
from dcim.models import (
|
2017-02-03 17:18:47 -05:00
|
|
|
ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
|
|
|
|
DeviceBayTemplate, DeviceType, DeviceRole, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer, Module,
|
|
|
|
Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, RackRole, Site,
|
|
|
|
SUBDEVICE_ROLE_CHILD, SUBDEVICE_ROLE_PARENT,
|
2016-05-18 16:02:53 -04:00
|
|
|
)
|
2017-01-31 15:35:09 -05:00
|
|
|
from extras.api.serializers import CustomFieldValueSerializer
|
2017-01-27 12:22:29 -05:00
|
|
|
from tenancy.api.serializers import NestedTenantSerializer
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Sites
|
|
|
|
#
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class SiteSerializer(serializers.ModelSerializer):
|
2017-01-27 12:22:29 -05:00
|
|
|
tenant = NestedTenantSerializer()
|
2017-01-31 15:35:09 -05:00
|
|
|
custom_field_values = CustomFieldValueSerializer(many=True)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Site
|
2017-01-27 12:22:29 -05:00
|
|
|
fields = [
|
|
|
|
'id', 'name', 'slug', 'tenant', 'facility', 'asn', 'physical_address', 'shipping_address', 'contact_name',
|
2017-01-31 15:35:09 -05:00
|
|
|
'contact_phone', 'contact_email', 'comments', 'custom_field_values', 'count_prefixes', 'count_vlans',
|
2017-01-27 12:22:29 -05:00
|
|
|
'count_racks', 'count_devices', 'count_circuits',
|
|
|
|
]
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class NestedSiteSerializer(serializers.ModelSerializer):
|
2017-01-31 10:40:53 -05:00
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:site-detail')
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class Meta:
|
|
|
|
model = Site
|
|
|
|
fields = ['id', 'url', 'name', 'slug']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class WritableSiteSerializer(serializers.ModelSerializer):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Site
|
|
|
|
fields = [
|
|
|
|
'id', 'name', 'slug', 'tenant', 'facility', 'asn', 'physical_address', 'shipping_address', 'contact_name',
|
|
|
|
'contact_phone', 'contact_email', 'comments',
|
|
|
|
]
|
|
|
|
|
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
#
|
|
|
|
# Rack groups
|
|
|
|
#
|
|
|
|
|
|
|
|
class RackGroupSerializer(serializers.ModelSerializer):
|
2017-01-27 12:22:29 -05:00
|
|
|
site = NestedSiteSerializer()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = RackGroup
|
|
|
|
fields = ['id', 'name', 'slug', 'site']
|
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class NestedRackGroupSerializer(serializers.ModelSerializer):
|
2017-01-31 10:40:53 -05:00
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackgroup-detail')
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class Meta:
|
|
|
|
model = RackGroup
|
|
|
|
fields = ['id', 'url', 'name', 'slug']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class WritableRackGroupSerializer(serializers.ModelSerializer):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = RackGroup
|
|
|
|
fields = ['id', 'name', 'slug', 'site']
|
|
|
|
|
|
|
|
|
2016-08-10 11:52:27 -04:00
|
|
|
#
|
|
|
|
# Rack roles
|
|
|
|
#
|
|
|
|
|
|
|
|
class RackRoleSerializer(serializers.ModelSerializer):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = RackRole
|
|
|
|
fields = ['id', 'name', 'slug', 'color']
|
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class NestedRackRoleSerializer(serializers.ModelSerializer):
|
2017-01-31 10:40:53 -05:00
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackrole-detail')
|
2016-08-10 11:52:27 -04:00
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class Meta:
|
|
|
|
model = RackRole
|
|
|
|
fields = ['id', 'url', 'name', 'slug']
|
2016-08-10 11:52:27 -04:00
|
|
|
|
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
#
|
|
|
|
# Racks
|
|
|
|
#
|
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class RackSerializer(serializers.ModelSerializer):
|
2017-01-27 12:22:29 -05:00
|
|
|
site = NestedSiteSerializer()
|
|
|
|
group = NestedRackGroupSerializer()
|
|
|
|
tenant = NestedTenantSerializer()
|
|
|
|
role = NestedRackRoleSerializer()
|
2017-01-31 15:35:09 -05:00
|
|
|
custom_field_values = CustomFieldValueSerializer(many=True)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Rack
|
2017-01-27 12:22:29 -05:00
|
|
|
fields = [
|
|
|
|
'id', 'name', 'facility_id', 'display_name', 'site', 'group', 'tenant', 'role', 'type', 'width', 'u_height',
|
2017-01-31 15:35:09 -05:00
|
|
|
'desc_units', 'comments', 'custom_field_values',
|
2017-01-27 12:22:29 -05:00
|
|
|
]
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class NestedRackSerializer(serializers.ModelSerializer):
|
2017-01-31 10:40:53 -05:00
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rack-detail')
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class Meta:
|
|
|
|
model = Rack
|
|
|
|
fields = ['id', 'url', 'name', 'display_name']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class WritableRackSerializer(serializers.ModelSerializer):
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class Meta:
|
|
|
|
model = Rack
|
2017-01-27 12:22:29 -05:00
|
|
|
fields = [
|
2017-01-31 15:35:09 -05:00
|
|
|
'id', 'name', 'facility_id', 'site', 'group', 'tenant', 'role', 'type', 'width', 'u_height', 'desc_units',
|
|
|
|
'comments',
|
2017-01-27 12:22:29 -05:00
|
|
|
]
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Manufacturers
|
|
|
|
#
|
|
|
|
|
|
|
|
class ManufacturerSerializer(serializers.ModelSerializer):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Manufacturer
|
|
|
|
fields = ['id', 'name', 'slug']
|
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class NestedManufacturerSerializer(serializers.ModelSerializer):
|
2017-01-31 10:40:53 -05:00
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:manufacturer-detail')
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class Meta:
|
|
|
|
model = Manufacturer
|
|
|
|
fields = ['id', 'url', 'name', 'slug']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Device types
|
|
|
|
#
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class DeviceTypeSerializer(serializers.ModelSerializer):
|
2017-01-27 12:22:29 -05:00
|
|
|
manufacturer = NestedManufacturerSerializer()
|
2016-09-27 16:04:14 -04:00
|
|
|
subdevice_role = serializers.SerializerMethodField()
|
2017-01-24 10:53:59 -05:00
|
|
|
instance_count = serializers.IntegerField(source='instances.count', read_only=True)
|
2017-01-31 15:35:09 -05:00
|
|
|
custom_field_values = CustomFieldValueSerializer(many=True)
|
2016-06-21 15:01:21 -04:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = DeviceType
|
2017-01-27 12:22:29 -05:00
|
|
|
fields = [
|
|
|
|
'id', 'manufacturer', 'model', 'slug', 'part_number', 'u_height', 'is_full_depth', 'interface_ordering',
|
2017-01-31 15:35:09 -05:00
|
|
|
'is_console_server', 'is_pdu', 'is_network_device', 'subdevice_role', 'comments', 'custom_field_values',
|
2017-01-27 12:22:29 -05:00
|
|
|
'instance_count',
|
|
|
|
]
|
2016-09-27 16:04:14 -04:00
|
|
|
|
|
|
|
def get_subdevice_role(self, obj):
|
|
|
|
return {
|
|
|
|
SUBDEVICE_ROLE_PARENT: 'parent',
|
|
|
|
SUBDEVICE_ROLE_CHILD: 'child',
|
|
|
|
None: None,
|
|
|
|
}[obj.subdevice_role]
|
2016-06-21 15:01:21 -04:00
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class NestedDeviceTypeSerializer(serializers.ModelSerializer):
|
2017-01-31 10:40:53 -05:00
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicetype-detail')
|
|
|
|
manufacturer = NestedManufacturerSerializer()
|
2016-06-21 15:01:21 -04:00
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class Meta:
|
|
|
|
model = DeviceType
|
|
|
|
fields = ['id', 'url', 'manufacturer', 'model', 'slug']
|
2016-06-21 15:01:21 -04:00
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class WritableDeviceTypeSerializer(serializers.ModelSerializer):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = DeviceType
|
|
|
|
fields = [
|
|
|
|
'id', 'manufacturer', 'model', 'slug', 'part_number', 'u_height', 'is_full_depth', 'interface_ordering',
|
|
|
|
'is_console_server', 'is_pdu', 'is_network_device', 'subdevice_role', 'comments',
|
|
|
|
]
|
|
|
|
|
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
#
|
|
|
|
# Console port templates
|
|
|
|
#
|
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class ConsolePortTemplateSerializer(serializers.ModelSerializer):
|
2017-02-03 17:18:47 -05:00
|
|
|
device_type = NestedDeviceTypeSerializer()
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = ConsolePortTemplate
|
|
|
|
fields = ['id', 'device_type', 'name']
|
|
|
|
|
|
|
|
|
|
|
|
class WritableConsolePortTemplateSerializer(serializers.ModelSerializer):
|
2016-03-08 22:48:14 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = ConsolePortTemplate
|
2017-02-03 17:18:47 -05:00
|
|
|
fields = ['id', 'device_type', 'name']
|
2016-03-08 22:48:14 -05:00
|
|
|
|
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
#
|
|
|
|
# Console server port templates
|
|
|
|
#
|
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class ConsoleServerPortTemplateSerializer(serializers.ModelSerializer):
|
2017-02-03 17:18:47 -05:00
|
|
|
device_type = NestedDeviceTypeSerializer()
|
2016-03-08 22:48:14 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = ConsoleServerPortTemplate
|
2017-02-03 17:18:47 -05:00
|
|
|
fields = ['id', 'device_type', 'name']
|
|
|
|
|
2016-03-08 22:48:14 -05:00
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
class WritableConsoleServerPortTemplateSerializer(serializers.ModelSerializer):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = ConsoleServerPortTemplate
|
|
|
|
fields = ['id', 'device_type', 'name']
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Power port templates
|
|
|
|
#
|
2016-03-08 22:48:14 -05:00
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class PowerPortTemplateSerializer(serializers.ModelSerializer):
|
2017-02-03 17:18:47 -05:00
|
|
|
device_type = NestedDeviceTypeSerializer()
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = PowerPortTemplate
|
|
|
|
fields = ['id', 'device_type', 'name']
|
|
|
|
|
|
|
|
|
|
|
|
class WritablePowerPortTemplateSerializer(serializers.ModelSerializer):
|
2016-03-08 22:48:14 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = PowerPortTemplate
|
2017-02-03 17:18:47 -05:00
|
|
|
fields = ['id', 'device_type', 'name']
|
2016-03-08 22:48:14 -05:00
|
|
|
|
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
#
|
|
|
|
# Power outlet templates
|
|
|
|
#
|
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class PowerOutletTemplateSerializer(serializers.ModelSerializer):
|
2017-02-03 17:18:47 -05:00
|
|
|
device_type = NestedDeviceTypeSerializer()
|
2016-03-08 22:48:14 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = PowerOutletTemplate
|
2017-02-03 17:18:47 -05:00
|
|
|
fields = ['id', 'device_type', 'name']
|
2016-03-08 22:48:14 -05:00
|
|
|
|
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
class WritablePowerOutletTemplateSerializer(serializers.ModelSerializer):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = PowerOutletTemplate
|
|
|
|
fields = ['id', 'device_type', 'name']
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Interface templates
|
|
|
|
#
|
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class InterfaceTemplateSerializer(serializers.ModelSerializer):
|
2017-02-03 17:18:47 -05:00
|
|
|
device_type = NestedDeviceTypeSerializer()
|
2016-03-08 22:48:14 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = InterfaceTemplate
|
2017-02-03 17:18:47 -05:00
|
|
|
fields = ['id', 'device_type', 'name', 'form_factor', 'mgmt_only']
|
2016-03-08 22:48:14 -05:00
|
|
|
|
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
class WritableInterfaceTemplateSerializer(serializers.ModelSerializer):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = InterfaceTemplate
|
|
|
|
fields = ['id', 'device_type', 'name', 'form_factor', 'mgmt_only']
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Device bay templates
|
|
|
|
#
|
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class DeviceBayTemplateSerializer(serializers.ModelSerializer):
|
2017-02-03 17:18:47 -05:00
|
|
|
device_type = NestedDeviceTypeSerializer()
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = DeviceBayTemplate
|
|
|
|
fields = ['id', 'device_type', 'name']
|
|
|
|
|
|
|
|
|
|
|
|
class WritableDeviceBayTemplateSerializer(serializers.ModelSerializer):
|
2017-01-27 12:22:29 -05:00
|
|
|
|
|
|
|
class Meta:
|
2017-02-03 17:18:47 -05:00
|
|
|
model = DeviceBayTemplate
|
|
|
|
fields = ['id', 'device_type', 'name']
|
2017-01-27 12:22:29 -05:00
|
|
|
|
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
#
|
|
|
|
# Device roles
|
|
|
|
#
|
|
|
|
|
|
|
|
class DeviceRoleSerializer(serializers.ModelSerializer):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = DeviceRole
|
|
|
|
fields = ['id', 'name', 'slug', 'color']
|
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class NestedDeviceRoleSerializer(serializers.ModelSerializer):
|
2017-01-31 10:40:53 -05:00
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicerole-detail')
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class Meta:
|
|
|
|
model = DeviceRole
|
|
|
|
fields = ['id', 'url', 'name', 'slug']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Platforms
|
|
|
|
#
|
|
|
|
|
|
|
|
class PlatformSerializer(serializers.ModelSerializer):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Platform
|
|
|
|
fields = ['id', 'name', 'slug', 'rpc_client']
|
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class NestedPlatformSerializer(serializers.ModelSerializer):
|
2017-01-31 10:40:53 -05:00
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:platform-detail')
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
class Meta:
|
|
|
|
model = Platform
|
|
|
|
fields = ['id', 'url', 'name', 'slug']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Devices
|
|
|
|
#
|
|
|
|
|
2017-01-27 12:22:29 -05:00
|
|
|
# Cannot import ipam.api.NestedIPAddressSerializer due to circular dependency
|
2017-01-31 15:35:09 -05:00
|
|
|
class DeviceIPAddressSerializer(serializers.ModelSerializer):
|
2017-01-31 10:40:53 -05:00
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = IPAddress
|
2017-01-27 12:22:29 -05:00
|
|
|
fields = ['id', 'url', 'family', 'address']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class DeviceSerializer(serializers.ModelSerializer):
|
2017-01-27 12:22:29 -05:00
|
|
|
device_type = NestedDeviceTypeSerializer()
|
|
|
|
device_role = NestedDeviceRoleSerializer()
|
|
|
|
tenant = NestedTenantSerializer()
|
|
|
|
platform = NestedPlatformSerializer()
|
|
|
|
rack = NestedRackSerializer()
|
|
|
|
primary_ip = DeviceIPAddressSerializer()
|
|
|
|
primary_ip4 = DeviceIPAddressSerializer()
|
|
|
|
primary_ip6 = DeviceIPAddressSerializer()
|
2016-07-05 15:32:16 -04:00
|
|
|
parent_device = serializers.SerializerMethodField()
|
2017-01-31 15:35:09 -05:00
|
|
|
custom_field_values = CustomFieldValueSerializer(many=True)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Device
|
2017-01-27 12:22:29 -05:00
|
|
|
fields = [
|
2017-02-03 17:18:47 -05:00
|
|
|
'id', 'name', 'display_name', 'device_type', 'device_role', 'tenant', 'platform', 'serial', 'asset_tag',
|
2017-01-27 12:22:29 -05:00
|
|
|
'rack', 'position', 'face', 'parent_device', 'status', 'primary_ip', 'primary_ip4', 'primary_ip6',
|
2017-01-31 15:35:09 -05:00
|
|
|
'comments', 'custom_field_values',
|
2017-01-27 12:22:29 -05:00
|
|
|
]
|
2016-07-05 15:32:16 -04:00
|
|
|
|
|
|
|
def get_parent_device(self, obj):
|
|
|
|
try:
|
|
|
|
device_bay = obj.parent_bay
|
|
|
|
except DeviceBay.DoesNotExist:
|
|
|
|
return None
|
|
|
|
return {
|
|
|
|
'id': device_bay.device.pk,
|
|
|
|
'name': device_bay.device.name,
|
|
|
|
'device_bay': {
|
|
|
|
'id': device_bay.pk,
|
|
|
|
'name': device_bay.name,
|
|
|
|
}
|
|
|
|
}
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class NestedDeviceSerializer(serializers.ModelSerializer):
|
2017-01-31 10:40:53 -05:00
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:device-detail')
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2016-07-05 13:43:19 -04:00
|
|
|
class Meta:
|
2016-03-01 11:23:03 -05:00
|
|
|
model = Device
|
2017-01-27 12:22:29 -05:00
|
|
|
fields = ['id', 'url', 'name', 'display_name']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class WritableDeviceSerializer(serializers.ModelSerializer):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Device
|
|
|
|
fields = [
|
2017-02-03 17:18:47 -05:00
|
|
|
'id', 'name', 'device_type', 'device_role', 'tenant', 'platform', 'serial', 'asset_tag', 'rack', 'position',
|
|
|
|
'face', 'status', 'primary_ip4', 'primary_ip6', 'comments',
|
2017-01-31 15:35:09 -05:00
|
|
|
]
|
|
|
|
|
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
#
|
|
|
|
# Console server ports
|
|
|
|
#
|
|
|
|
|
|
|
|
class ConsoleServerPortSerializer(serializers.ModelSerializer):
|
2017-02-01 14:34:19 -05:00
|
|
|
device = NestedDeviceSerializer()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = ConsoleServerPort
|
|
|
|
fields = ['id', 'device', 'name', 'connected_console']
|
|
|
|
|
|
|
|
|
2017-02-01 14:34:19 -05:00
|
|
|
class WritableConsoleServerPortSerializer(serializers.ModelSerializer):
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-26 22:37:17 -05:00
|
|
|
class Meta:
|
|
|
|
model = ConsoleServerPort
|
2017-02-01 14:34:19 -05:00
|
|
|
fields = ['id', 'device', 'name', 'connected_console']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Console ports
|
|
|
|
#
|
|
|
|
|
|
|
|
class ConsolePortSerializer(serializers.ModelSerializer):
|
2017-02-01 14:34:19 -05:00
|
|
|
device = NestedDeviceSerializer()
|
2017-01-26 22:37:17 -05:00
|
|
|
cs_port = ConsoleServerPortSerializer()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = ConsolePort
|
|
|
|
fields = ['id', 'device', 'name', 'cs_port', 'connection_status']
|
|
|
|
|
|
|
|
|
2017-02-01 14:34:19 -05:00
|
|
|
class WritableConsolePortSerializer(serializers.ModelSerializer):
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-26 22:37:17 -05:00
|
|
|
class Meta:
|
|
|
|
model = ConsolePort
|
2017-02-01 14:34:19 -05:00
|
|
|
fields = ['id', 'device', 'name', 'cs_port', 'connection_status']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Power outlets
|
|
|
|
#
|
|
|
|
|
|
|
|
class PowerOutletSerializer(serializers.ModelSerializer):
|
2017-02-01 14:34:19 -05:00
|
|
|
device = NestedDeviceSerializer()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = PowerOutlet
|
|
|
|
fields = ['id', 'device', 'name', 'connected_port']
|
|
|
|
|
|
|
|
|
2017-02-01 14:34:19 -05:00
|
|
|
class WritablePowerOutletSerializer(serializers.ModelSerializer):
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-26 22:37:17 -05:00
|
|
|
class Meta:
|
|
|
|
model = PowerOutlet
|
2017-02-01 14:34:19 -05:00
|
|
|
fields = ['id', 'device', 'name', 'connected_port']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Power ports
|
|
|
|
#
|
|
|
|
|
|
|
|
class PowerPortSerializer(serializers.ModelSerializer):
|
2017-02-01 14:34:19 -05:00
|
|
|
device = NestedDeviceSerializer()
|
2017-01-26 22:37:17 -05:00
|
|
|
power_outlet = PowerOutletSerializer()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = PowerPort
|
|
|
|
fields = ['id', 'device', 'name', 'power_outlet', 'connection_status']
|
|
|
|
|
|
|
|
|
2017-02-01 14:34:19 -05:00
|
|
|
class WritablePowerPortSerializer(serializers.ModelSerializer):
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-26 22:37:17 -05:00
|
|
|
class Meta:
|
|
|
|
model = PowerPort
|
2017-02-01 14:34:19 -05:00
|
|
|
fields = ['id', 'device', 'name', 'power_outlet', 'connection_status']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Interfaces
|
|
|
|
#
|
|
|
|
|
2017-01-30 15:35:01 -05:00
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
class InterfaceSerializer(serializers.ModelSerializer):
|
2017-02-01 14:34:19 -05:00
|
|
|
device = NestedDeviceSerializer()
|
2017-01-30 15:35:01 -05:00
|
|
|
connection = serializers.SerializerMethodField(read_only=True)
|
|
|
|
connected_interface = serializers.SerializerMethodField(read_only=True)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Interface
|
2017-01-30 15:35:01 -05:00
|
|
|
fields = [
|
|
|
|
'id', 'device', 'name', 'form_factor', 'mac_address', 'mgmt_only', 'description', 'connection',
|
|
|
|
'connected_interface',
|
|
|
|
]
|
|
|
|
|
|
|
|
def get_connection(self, obj):
|
|
|
|
if obj.connection:
|
|
|
|
return NestedInterfaceConnectionSerializer(obj.connection, context=self.context).data
|
|
|
|
return None
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-30 15:35:01 -05:00
|
|
|
def get_connected_interface(self, obj):
|
|
|
|
if obj.connected_interface:
|
|
|
|
return PeerInterfaceSerializer(obj.connected_interface, context=self.context).data
|
|
|
|
return None
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-30 15:35:01 -05:00
|
|
|
|
2017-01-31 15:35:09 -05:00
|
|
|
class PeerInterfaceSerializer(serializers.ModelSerializer):
|
2017-01-31 10:40:53 -05:00
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:interface-detail')
|
2017-01-30 15:35:01 -05:00
|
|
|
device = NestedDeviceSerializer()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-26 22:37:17 -05:00
|
|
|
class Meta:
|
|
|
|
model = Interface
|
2017-01-30 15:35:01 -05:00
|
|
|
fields = ['id', 'url', 'device', 'name', 'form_factor', 'mac_address', 'mgmt_only', 'description']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2017-02-01 14:34:19 -05:00
|
|
|
class WritableInterfaceSerializer(serializers.ModelSerializer):
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-30 15:35:01 -05:00
|
|
|
class Meta:
|
|
|
|
model = Interface
|
2017-02-01 14:34:19 -05:00
|
|
|
fields = ['id', 'device', 'name', 'form_factor', 'mac_address', 'mgmt_only', 'description']
|
2017-01-31 15:35:09 -05:00
|
|
|
|
|
|
|
|
2016-07-05 13:43:19 -04:00
|
|
|
#
|
|
|
|
# Device bays
|
|
|
|
#
|
|
|
|
|
|
|
|
class DeviceBaySerializer(serializers.ModelSerializer):
|
2017-02-01 14:34:19 -05:00
|
|
|
device = NestedDeviceSerializer()
|
2017-01-27 12:22:29 -05:00
|
|
|
installed_device = NestedDeviceSerializer()
|
2016-07-05 13:43:19 -04:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = DeviceBay
|
2017-01-26 22:37:17 -05:00
|
|
|
fields = ['id', 'device', 'name', 'installed_device']
|
2016-07-05 13:43:19 -04:00
|
|
|
|
|
|
|
|
2017-02-01 14:34:19 -05:00
|
|
|
class WritableDeviceBaySerializer(serializers.ModelSerializer):
|
2016-07-05 13:43:19 -04:00
|
|
|
|
2017-01-26 22:37:17 -05:00
|
|
|
class Meta:
|
|
|
|
model = DeviceBay
|
2017-02-01 14:34:19 -05:00
|
|
|
fields = ['id', 'device', 'name']
|
2016-07-05 13:43:19 -04:00
|
|
|
|
|
|
|
|
2016-08-10 10:44:37 -04:00
|
|
|
#
|
|
|
|
# Modules
|
|
|
|
#
|
|
|
|
|
|
|
|
class ModuleSerializer(serializers.ModelSerializer):
|
2017-02-01 14:34:19 -05:00
|
|
|
device = NestedDeviceSerializer()
|
2017-01-27 12:22:29 -05:00
|
|
|
manufacturer = NestedManufacturerSerializer()
|
2016-08-10 10:44:37 -04:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Module
|
|
|
|
fields = ['id', 'device', 'parent', 'name', 'manufacturer', 'part_id', 'serial', 'discovered']
|
|
|
|
|
|
|
|
|
2017-02-01 14:34:19 -05:00
|
|
|
class WritableModuleSerializer(serializers.ModelSerializer):
|
2016-08-10 10:44:37 -04:00
|
|
|
|
2017-01-26 22:37:17 -05:00
|
|
|
class Meta:
|
|
|
|
model = Module
|
2017-02-01 14:34:19 -05:00
|
|
|
fields = ['id', 'device', 'parent', 'name', 'manufacturer', 'part_id', 'serial', 'discovered']
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Interface connections
|
|
|
|
#
|
|
|
|
|
|
|
|
class InterfaceConnectionSerializer(serializers.ModelSerializer):
|
|
|
|
interface_a = PeerInterfaceSerializer()
|
|
|
|
interface_b = PeerInterfaceSerializer()
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = InterfaceConnection
|
|
|
|
fields = ['id', 'interface_a', 'interface_b', 'connection_status']
|
|
|
|
|
|
|
|
|
|
|
|
class NestedInterfaceConnectionSerializer(serializers.ModelSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:interfaceconnection-detail')
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = InterfaceConnection
|
|
|
|
fields = ['id', 'url', 'connection_status']
|
|
|
|
|
|
|
|
|
|
|
|
class WritableInterfaceConnectionSerializer(serializers.ModelSerializer):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = InterfaceConnection
|
|
|
|
fields = ['id', 'interface_a', 'interface_b', 'connection_status']
|