123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391 |
- from rest_framework import serializers
- from ipam.models import IPAddress
- from dcim.models import (
- ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay, DeviceType,
- DeviceRole, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer, Platform, PowerOutlet,
- PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, RACK_FACE_FRONT, RACK_FACE_REAR, Site,
- )
- #
- # Sites
- #
- class SiteSerializer(serializers.ModelSerializer):
- class Meta:
- model = Site
- fields = ['id', 'name', 'slug', 'facility', 'asn', 'physical_address', 'shipping_address', 'comments',
- 'count_prefixes', 'count_vlans', 'count_racks', 'count_devices', 'count_circuits']
- class SiteNestedSerializer(SiteSerializer):
- class Meta(SiteSerializer.Meta):
- fields = ['id', 'name', 'slug']
- #
- # Rack groups
- #
- class RackGroupSerializer(serializers.ModelSerializer):
- site = SiteNestedSerializer()
- class Meta:
- model = RackGroup
- fields = ['id', 'name', 'slug', 'site']
- class RackGroupNestedSerializer(RackGroupSerializer):
- class Meta(SiteSerializer.Meta):
- fields = ['id', 'name', 'slug']
- #
- # Racks
- #
- class RackSerializer(serializers.ModelSerializer):
- site = SiteNestedSerializer()
- group = RackGroupNestedSerializer()
- class Meta:
- model = Rack
- fields = ['id', 'name', 'facility_id', 'display_name', 'site', 'group', 'u_height', 'comments']
- class RackNestedSerializer(RackSerializer):
- class Meta(RackSerializer.Meta):
- fields = ['id', 'name', 'facility_id', 'display_name']
- class RackDetailSerializer(RackSerializer):
- front_units = serializers.SerializerMethodField()
- rear_units = serializers.SerializerMethodField()
- class Meta(RackSerializer.Meta):
- fields = ['id', 'name', 'facility_id', 'display_name', 'site', 'group', 'u_height', 'comments', 'front_units',
- 'rear_units']
- def get_front_units(self, obj):
- units = obj.get_rack_units(face=RACK_FACE_FRONT)
- for u in units:
- u['device'] = DeviceNestedSerializer(u['device']).data if u['device'] else None
- return units
- def get_rear_units(self, obj):
- units = obj.get_rack_units(face=RACK_FACE_REAR)
- for u in units:
- u['device'] = DeviceNestedSerializer(u['device']).data if u['device'] else None
- return units
- #
- # Manufacturers
- #
- class ManufacturerSerializer(serializers.ModelSerializer):
- class Meta:
- model = Manufacturer
- fields = ['id', 'name', 'slug']
- class ManufacturerNestedSerializer(ManufacturerSerializer):
- class Meta(ManufacturerSerializer.Meta):
- pass
- #
- # Device types
- #
- class DeviceTypeSerializer(serializers.ModelSerializer):
- manufacturer = ManufacturerNestedSerializer()
- class Meta:
- model = DeviceType
- fields = ['id', 'manufacturer', 'model', 'slug', 'u_height', 'is_full_depth', 'is_console_server', 'is_pdu',
- 'is_network_device']
- class DeviceTypeNestedSerializer(DeviceTypeSerializer):
- class Meta(DeviceTypeSerializer.Meta):
- fields = ['id', 'manufacturer', 'model', 'slug']
- class ConsolePortTemplateNestedSerializer(serializers.ModelSerializer):
- class Meta:
- model = ConsolePortTemplate
- fields = ['id', 'name']
- class ConsoleServerPortTemplateNestedSerializer(serializers.ModelSerializer):
- class Meta:
- model = ConsoleServerPortTemplate
- fields = ['id', 'name']
- class PowerPortTemplateNestedSerializer(serializers.ModelSerializer):
- class Meta:
- model = PowerPortTemplate
- fields = ['id', 'name']
- class PowerOutletTemplateNestedSerializer(serializers.ModelSerializer):
- class Meta:
- model = PowerOutletTemplate
- fields = ['id', 'name']
- class InterfaceTemplateNestedSerializer(serializers.ModelSerializer):
- class Meta:
- model = InterfaceTemplate
- fields = ['id', 'name', 'form_factor', 'mgmt_only']
- class DeviceTypeDetailSerializer(DeviceTypeSerializer):
- console_port_templates = ConsolePortTemplateNestedSerializer(many=True, read_only=True)
- cs_port_templates = ConsoleServerPortTemplateNestedSerializer(many=True, read_only=True)
- power_port_templates = PowerPortTemplateNestedSerializer(many=True, read_only=True)
- power_outlet_templates = PowerPortTemplateNestedSerializer(many=True, read_only=True)
- interface_templates = InterfaceTemplateNestedSerializer(many=True, read_only=True)
- class Meta(DeviceTypeSerializer.Meta):
- fields = ['id', 'manufacturer', 'model', 'slug', 'u_height', 'is_full_depth', 'is_console_server', 'is_pdu',
- 'is_network_device', 'console_port_templates', 'cs_port_templates', 'power_port_templates',
- 'power_outlet_templates', 'interface_templates']
- #
- # Device roles
- #
- class DeviceRoleSerializer(serializers.ModelSerializer):
- class Meta:
- model = DeviceRole
- fields = ['id', 'name', 'slug', 'color']
- class DeviceRoleNestedSerializer(DeviceRoleSerializer):
- class Meta(DeviceRoleSerializer.Meta):
- fields = ['id', 'name', 'slug']
- #
- # Platforms
- #
- class PlatformSerializer(serializers.ModelSerializer):
- class Meta:
- model = Platform
- fields = ['id', 'name', 'slug', 'rpc_client']
- class PlatformNestedSerializer(PlatformSerializer):
- class Meta(PlatformSerializer.Meta):
- fields = ['id', 'name', 'slug']
- #
- # Devices
- #
- # Cannot import ipam.api.IPAddressNestedSerializer due to circular dependency
- class DeviceIPAddressNestedSerializer(serializers.ModelSerializer):
- class Meta:
- model = IPAddress
- fields = ['id', 'family', 'address']
- class DeviceSerializer(serializers.ModelSerializer):
- device_type = DeviceTypeNestedSerializer()
- device_role = DeviceRoleNestedSerializer()
- platform = PlatformNestedSerializer()
- rack = RackNestedSerializer()
- primary_ip = DeviceIPAddressNestedSerializer()
- primary_ip4 = DeviceIPAddressNestedSerializer()
- primary_ip6 = DeviceIPAddressNestedSerializer()
- parent_device = serializers.SerializerMethodField()
- class Meta:
- model = Device
- fields = ['id', 'name', 'display_name', 'device_type', 'device_role', 'platform', 'serial', 'rack', 'position',
- 'face', 'parent_device', 'status', 'primary_ip', 'primary_ip4', 'primary_ip6', 'comments']
- 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,
- }
- }
- class DeviceNestedSerializer(serializers.ModelSerializer):
- class Meta:
- model = Device
- fields = ['id', 'name', 'display_name']
- #
- # Console server ports
- #
- class ConsoleServerPortSerializer(serializers.ModelSerializer):
- device = DeviceNestedSerializer()
- class Meta:
- model = ConsoleServerPort
- fields = ['id', 'device', 'name', 'connected_console']
- class ConsoleServerPortNestedSerializer(ConsoleServerPortSerializer):
- class Meta(ConsoleServerPortSerializer.Meta):
- fields = ['id', 'device', 'name']
- #
- # Console ports
- #
- class ConsolePortSerializer(serializers.ModelSerializer):
- device = DeviceNestedSerializer()
- cs_port = ConsoleServerPortNestedSerializer()
- class Meta:
- model = ConsolePort
- fields = ['id', 'device', 'name', 'cs_port', 'connection_status']
- class ConsolePortNestedSerializer(ConsolePortSerializer):
- class Meta(ConsolePortSerializer.Meta):
- fields = ['id', 'device', 'name']
- #
- # Power outlets
- #
- class PowerOutletSerializer(serializers.ModelSerializer):
- device = DeviceNestedSerializer()
- class Meta:
- model = PowerOutlet
- fields = ['id', 'device', 'name', 'connected_port']
- class PowerOutletNestedSerializer(PowerOutletSerializer):
- class Meta(PowerOutletSerializer.Meta):
- fields = ['id', 'device', 'name']
- #
- # Power ports
- #
- class PowerPortSerializer(serializers.ModelSerializer):
- device = DeviceNestedSerializer()
- power_outlet = PowerOutletNestedSerializer()
- class Meta:
- model = PowerPort
- fields = ['id', 'device', 'name', 'power_outlet', 'connection_status']
- class PowerPortNestedSerializer(PowerPortSerializer):
- class Meta(PowerPortSerializer.Meta):
- fields = ['id', 'device', 'name']
- #
- # Interfaces
- #
- class InterfaceSerializer(serializers.ModelSerializer):
- device = DeviceNestedSerializer()
- form_factor = serializers.ReadOnlyField(source='get_form_factor_display')
- class Meta:
- model = Interface
- fields = ['id', 'device', 'name', 'form_factor', 'mac_address', 'mgmt_only', 'description', 'is_connected']
- class InterfaceNestedSerializer(InterfaceSerializer):
- form_factor = serializers.ReadOnlyField(source='get_form_factor_display')
- class Meta(InterfaceSerializer.Meta):
- fields = ['id', 'device', 'name']
- class InterfaceDetailSerializer(InterfaceSerializer):
- connected_interface = InterfaceSerializer(source='get_connected_interface')
- class Meta(InterfaceSerializer.Meta):
- fields = ['id', 'device', 'name', 'form_factor', 'mac_address', 'mgmt_only', 'description', 'is_connected',
- '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
- #
- class InterfaceConnectionSerializer(serializers.ModelSerializer):
- class Meta:
- model = InterfaceConnection
- fields = ['id', 'interface_a', 'interface_b', 'connection_status']
|