class DeviceTypeSerializer(CustomFieldModelSerializer): manufacturer = NestedManufacturerSerializer() interface_ordering = ChoiceFieldSerializer(choices=IFACE_ORDERING_CHOICES) subdevice_role = ChoiceFieldSerializer(choices=SUBDEVICE_ROLE_CHOICES) instance_count = serializers.IntegerField(source='instances.count', read_only=True) 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', 'custom_fields', 'instance_count', ]
class IPAddressSerializer(CustomFieldModelSerializer): vrf = NestedVRFSerializer() tenant = NestedTenantSerializer() status = ChoiceFieldSerializer(choices=IPADDRESS_STATUS_CHOICES) role = ChoiceFieldSerializer(choices=IPADDRESS_ROLE_CHOICES) interface = IPAddressInterfaceSerializer() class Meta: model = IPAddress fields = [ 'id', 'family', 'address', 'vrf', 'tenant', 'status', 'role', 'interface', 'description', 'nat_inside', 'nat_outside', 'custom_fields', 'created', 'last_updated', ]
class RackSerializer(CustomFieldModelSerializer): site = NestedSiteSerializer() group = NestedRackGroupSerializer() tenant = NestedTenantSerializer() role = NestedRackRoleSerializer() type = ChoiceFieldSerializer(choices=RACK_TYPE_CHOICES) width = ChoiceFieldSerializer(choices=RACK_WIDTH_CHOICES) class Meta: model = Rack fields = [ 'id', 'name', 'facility_id', 'display_name', 'site', 'group', 'tenant', 'role', 'type', 'width', 'u_height', 'desc_units', 'comments', 'custom_fields', ]
class DeviceSerializer(CustomFieldModelSerializer): device_type = NestedDeviceTypeSerializer() device_role = NestedDeviceRoleSerializer() tenant = NestedTenantSerializer() platform = NestedPlatformSerializer() site = NestedSiteSerializer() rack = NestedRackSerializer() face = ChoiceFieldSerializer(choices=RACK_FACE_CHOICES) status = ChoiceFieldSerializer(choices=STATUS_CHOICES) primary_ip = DeviceIPAddressSerializer() primary_ip4 = DeviceIPAddressSerializer() primary_ip6 = DeviceIPAddressSerializer() parent_device = serializers.SerializerMethodField() class Meta: model = Device fields = [ 'id', 'name', 'display_name', 'device_type', 'device_role', 'tenant', 'platform', 'serial', 'asset_tag', 'site', 'rack', 'position', 'face', 'parent_device', 'status', 'primary_ip', 'primary_ip4', 'primary_ip6', 'comments', 'custom_fields', ] def get_parent_device(self, obj): try: device_bay = obj.parent_bay except DeviceBay.DoesNotExist: return None context = {'request': self.context['request']} data = NestedDeviceSerializer(instance=device_bay.device, context=context).data data['device_bay'] = NestedDeviceBaySerializer(instance=device_bay, context=context).data return data
class InterfaceSerializer(serializers.ModelSerializer): device = NestedDeviceSerializer() form_factor = ChoiceFieldSerializer(choices=IFACE_FF_CHOICES) lag = NestedInterfaceSerializer() is_connected = serializers.SerializerMethodField(read_only=True) interface_connection = serializers.SerializerMethodField(read_only=True) circuit_termination = InterfaceCircuitTerminationSerializer() untagged_vlan = InterfaceVLANSerializer() mode = ChoiceFieldSerializer(choices=IFACE_MODE_CHOICES) tagged_vlans = InterfaceVLANSerializer(many=True) class Meta: model = Interface fields = [ 'id', 'device', 'name', 'form_factor', 'enabled', 'lag', 'mtu', 'mac_address', 'mgmt_only', 'description', 'is_connected', 'interface_connection', 'circuit_termination', 'mode', 'untagged_vlan', 'tagged_vlans', ] def get_is_connected(self, obj): """ Return True if the interface has a connected interface or circuit termination. """ if obj.connection: return True try: circuit_termination = obj.circuit_termination return True except CircuitTermination.DoesNotExist: pass return False def get_interface_connection(self, obj): if obj.connection: return OrderedDict(( ('interface', PeerInterfaceSerializer(obj.connected_interface, context=self.context).data), ('status', obj.connection.connection_status), )) return None
class VirtualMachineSerializer(CustomFieldModelSerializer): status = ChoiceFieldSerializer(choices=STATUS_CHOICES) cluster = NestedClusterSerializer() role = NestedDeviceRoleSerializer() tenant = NestedTenantSerializer() platform = NestedPlatformSerializer() primary_ip = VirtualMachineIPAddressSerializer() primary_ip4 = VirtualMachineIPAddressSerializer() primary_ip6 = VirtualMachineIPAddressSerializer() class Meta: model = VirtualMachine fields = [ 'id', 'name', 'status', 'cluster', 'role', 'tenant', 'platform', 'primary_ip', 'primary_ip4', 'primary_ip6', 'vcpus', 'memory', 'disk', 'comments', 'custom_fields', 'created', 'last_updated', ]
class PrefixSerializer(CustomFieldModelSerializer): site = NestedSiteSerializer() vrf = NestedVRFSerializer() tenant = NestedTenantSerializer() vlan = NestedVLANSerializer() status = ChoiceFieldSerializer(choices=PREFIX_STATUS_CHOICES) role = NestedRoleSerializer() class Meta: model = Prefix fields = [ 'id', 'family', 'prefix', 'site', 'vrf', 'tenant', 'vlan', 'status', 'role', 'is_pool', 'description', 'custom_fields', 'created', 'last_updated', ]
class InterfaceSerializer(serializers.ModelSerializer): device = NestedDeviceSerializer() form_factor = ChoiceFieldSerializer(choices=IFACE_FF_CHOICES) lag = NestedInterfaceSerializer() connection = serializers.SerializerMethodField(read_only=True) connected_interface = serializers.SerializerMethodField(read_only=True) class Meta: model = Interface fields = [ 'id', 'device', 'name', 'form_factor', 'lag', '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 def get_connected_interface(self, obj): if obj.connected_interface: return PeerInterfaceSerializer(obj.connected_interface, context=self.context).data return None
class InterfaceTemplateSerializer(serializers.ModelSerializer): device_type = NestedDeviceTypeSerializer() form_factor = ChoiceFieldSerializer(choices=IFACE_FF_CHOICES) class Meta: model = InterfaceTemplate fields = ['id', 'device_type', 'name', 'form_factor', 'mgmt_only']
class UserActionSerializer(serializers.ModelSerializer): user = NestedUserSerializer() action = ChoiceFieldSerializer(choices=ACTION_CHOICES) class Meta: model = UserAction fields = ['id', 'time', 'user', 'action', 'message']
class SiteSerializer(CustomFieldModelSerializer): status = ChoiceFieldSerializer(choices=SITE_STATUS_CHOICES) region = NestedRegionSerializer() tenant = NestedTenantSerializer() time_zone = TimeZoneField(required=False) class Meta: model = Site fields = [ 'id', 'name', 'slug', 'status', 'region', 'tenant', 'facility', 'asn', 'time_zone', 'description', 'physical_address', 'shipping_address', 'contact_name', 'contact_phone', 'contact_email', 'comments', 'custom_fields', 'created', 'last_updated', 'count_prefixes', 'count_vlans', 'count_racks', 'count_devices', 'count_circuits', ]
class ServiceSerializer(serializers.ModelSerializer): device = NestedDeviceSerializer() protocol = ChoiceFieldSerializer(choices=IP_PROTOCOL_CHOICES) ipaddresses = NestedIPAddressSerializer(many=True) class Meta: model = Service fields = ['id', 'device', 'name', 'port', 'protocol', 'ipaddresses', 'description']
class InterfaceConnectionSerializer(serializers.ModelSerializer): interface_a = PeerInterfaceSerializer() interface_b = PeerInterfaceSerializer() connection_status = ChoiceFieldSerializer(choices=CONNECTION_STATUS_CHOICES) class Meta: model = InterfaceConnection fields = ['id', 'interface_a', 'interface_b', 'connection_status']
class NarrowPrefixSerializer(CustomFieldModelSerializer): vlan = NestedVLANSerializer() status = ChoiceFieldSerializer(choices=PREFIX_STATUS_CHOICES) role = NestedRoleSerializer() class Meta: model = Prefix fields = [ 'id', 'family', 'prefix', 'vlan', 'status', 'role', 'is_pool', 'description', 'custom_fields', 'created', 'last_updated', ]
class PeerInterfaceSerializer(serializers.ModelSerializer): url = serializers.HyperlinkedIdentityField( view_name='dcim-api:interface-detail') device = NestedDeviceSerializer() form_factor = ChoiceFieldSerializer(choices=IFACE_FF_CHOICES) class Meta: model = Interface fields = [ 'id', 'url', 'device', 'name', 'form_factor', 'mac_address', 'mgmt_only', 'description' ]
class CircuitSerializer(CustomFieldModelSerializer): provider = NestedProviderSerializer() status = ChoiceFieldSerializer(choices=CIRCUIT_STATUS_CHOICES) type = NestedCircuitTypeSerializer() tenant = NestedTenantSerializer() class Meta: model = Circuit fields = [ 'id', 'cid', 'provider', 'type', 'status', 'tenant', 'install_date', 'commit_rate', 'description', 'comments', 'custom_fields', 'created', 'last_updated', ]
class InterfaceSerializer(serializers.ModelSerializer): virtual_machine = NestedVirtualMachineSerializer() mode = ChoiceFieldSerializer(choices=IFACE_MODE_CHOICES) untagged_vlan = InterfaceVLANSerializer() tagged_vlans = InterfaceVLANSerializer(many=True) class Meta: model = Interface fields = [ 'id', 'name', 'virtual_machine', 'enabled', 'mac_address', 'mtu', 'mode', 'untagged_vlan', 'tagged_vlans', 'description', ]
class ServiceSerializer(serializers.ModelSerializer): device = NestedDeviceSerializer() virtual_machine = NestedVirtualMachineSerializer() protocol = ChoiceFieldSerializer(choices=IP_PROTOCOL_CHOICES) ipaddresses = NestedIPAddressSerializer(many=True) class Meta: model = Service fields = [ 'id', 'device', 'virtual_machine', 'name', 'port', 'protocol', 'ipaddresses', 'description', 'created', 'last_updated', ]
class FirewallSerializer(serializers.ModelSerializer): device_type = ChoiceFieldSerializer(choices=F_DEVICE_TYPE_CHOICES) class Meta: model = Firewall fields = [ 'id', 'name', 'hostname', 'username', 'device_type', 'panorama_device_group', ]
class VLANSerializer(CustomFieldModelSerializer): site = NestedSiteSerializer() group = NestedVLANGroupSerializer() tenant = NestedTenantSerializer() status = ChoiceFieldSerializer(choices=VLAN_STATUS_CHOICES) role = NestedRoleSerializer() class Meta: model = VLAN fields = [ 'id', 'site', 'group', 'vid', 'name', 'tenant', 'status', 'role', 'description', 'display_name', 'custom_fields', 'created', 'last_updated', ]
class RenderedGraphSerializer(serializers.ModelSerializer): embed_url = serializers.SerializerMethodField() embed_link = serializers.SerializerMethodField() type = ChoiceFieldSerializer(choices=GRAPH_TYPE_CHOICES) class Meta: model = Graph fields = ['id', 'type', 'weight', 'name', 'embed_url', 'embed_link'] def get_embed_url(self, obj): return obj.embed_url(self.context['graphed_object']) def get_embed_link(self, obj): return obj.embed_link(self.context['graphed_object'])
class GraphSerializer(serializers.ModelSerializer): type = ChoiceFieldSerializer(choices=GRAPH_TYPE_CHOICES) class Meta: model = Graph fields = ['id', 'type', 'weight', 'name', 'source', 'link']