2
0

serializers.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. from rest_framework import serializers
  2. from ipam.models import IPAddress
  3. from dcim.models import Site, Rack, RackGroup, Manufacturer, DeviceType, DeviceRole, Platform, Device, ConsolePort,\
  4. ConsoleServerPort, PowerPort, PowerOutlet, Interface, InterfaceConnection, RACK_FACE_FRONT, RACK_FACE_REAR
  5. #
  6. # Sites
  7. #
  8. class SiteSerializer(serializers.ModelSerializer):
  9. class Meta:
  10. model = Site
  11. fields = ['id', 'name', 'slug', 'facility', 'asn', 'physical_address', 'shipping_address', 'comments',
  12. 'count_prefixes', 'count_vlans', 'count_racks', 'count_devices', 'count_circuits']
  13. class SiteNestedSerializer(SiteSerializer):
  14. class Meta(SiteSerializer.Meta):
  15. fields = ['id', 'name', 'slug']
  16. #
  17. # Rack groups
  18. #
  19. class RackGroupSerializer(serializers.ModelSerializer):
  20. site = SiteNestedSerializer()
  21. class Meta:
  22. model = RackGroup
  23. fields = ['id', 'name', 'slug', 'site']
  24. class RackGroupNestedSerializer(SiteSerializer):
  25. class Meta(SiteSerializer.Meta):
  26. fields = ['id', 'name', 'slug']
  27. #
  28. # Racks
  29. #
  30. class RackSerializer(serializers.ModelSerializer):
  31. display_name = serializers.SerializerMethodField()
  32. site = SiteNestedSerializer()
  33. group = RackGroupNestedSerializer()
  34. class Meta:
  35. model = Rack
  36. fields = ['id', 'name', 'facility_id', 'display_name', 'site', 'group', 'u_height', 'comments']
  37. def get_display_name(self, obj):
  38. return str(obj)
  39. class RackNestedSerializer(RackSerializer):
  40. class Meta(RackSerializer.Meta):
  41. fields = ['id', 'name', 'facility_id', 'display_name']
  42. class RackDetailSerializer(RackSerializer):
  43. front_units = serializers.SerializerMethodField()
  44. rear_units = serializers.SerializerMethodField()
  45. class Meta(RackSerializer.Meta):
  46. fields = ['id', 'name', 'facility_id', 'display_name', 'site', 'group', 'u_height', 'comments', 'front_units',
  47. 'rear_units']
  48. def get_front_units(self, obj):
  49. units = obj.get_rack_units(face=RACK_FACE_FRONT)
  50. for u in units:
  51. u['device'] = DeviceNestedSerializer(u['device']).data if u['device'] else None
  52. return units
  53. def get_rear_units(self, obj):
  54. units = obj.get_rack_units(face=RACK_FACE_REAR)
  55. for u in units:
  56. u['device'] = DeviceNestedSerializer(u['device']).data if u['device'] else None
  57. return units
  58. #
  59. # Manufacturers
  60. #
  61. class ManufacturerSerializer(serializers.ModelSerializer):
  62. class Meta:
  63. model = Manufacturer
  64. fields = ['id', 'name', 'slug']
  65. class ManufacturerNestedSerializer(ManufacturerSerializer):
  66. class Meta(ManufacturerSerializer.Meta):
  67. pass
  68. #
  69. # Device types
  70. #
  71. class DeviceTypeSerializer(serializers.ModelSerializer):
  72. manufacturer = ManufacturerNestedSerializer()
  73. class Meta:
  74. model = DeviceType
  75. fields = ['id', 'manufacturer', 'model', 'slug', 'u_height', 'is_console_server', 'is_pdu', 'is_network_device']
  76. class DeviceTypeNestedSerializer(DeviceTypeSerializer):
  77. class Meta(DeviceTypeSerializer.Meta):
  78. fields = ['id', 'manufacturer', 'model', 'slug']
  79. #
  80. # Device roles
  81. #
  82. class DeviceRoleSerializer(serializers.ModelSerializer):
  83. class Meta:
  84. model = DeviceRole
  85. fields = ['id', 'name', 'slug', 'color']
  86. class DeviceRoleNestedSerializer(DeviceRoleSerializer):
  87. class Meta(DeviceRoleSerializer.Meta):
  88. fields = ['id', 'name', 'slug']
  89. #
  90. # Platforms
  91. #
  92. class PlatformSerializer(serializers.ModelSerializer):
  93. class Meta:
  94. model = Platform
  95. fields = ['id', 'name', 'slug', 'rpc_client']
  96. class PlatformNestedSerializer(PlatformSerializer):
  97. class Meta(PlatformSerializer.Meta):
  98. fields = ['id', 'name', 'slug']
  99. #
  100. # Devices
  101. #
  102. # Cannot import ipam.api.IPAddressNestedSerializer due to circular dependency
  103. class DeviceIPAddressNestedSerializer(serializers.ModelSerializer):
  104. class Meta:
  105. model = IPAddress
  106. fields = ['id', 'family', 'address']
  107. class DeviceSerializer(serializers.ModelSerializer):
  108. device_type = DeviceTypeNestedSerializer()
  109. device_role = DeviceRoleNestedSerializer()
  110. platform = PlatformNestedSerializer()
  111. rack = RackNestedSerializer()
  112. primary_ip = DeviceIPAddressNestedSerializer()
  113. class Meta:
  114. model = Device
  115. fields = ['id', 'name', 'display_name', 'device_type', 'device_role', 'platform', 'serial', 'rack', 'position',
  116. 'face', 'status', 'primary_ip', 'ro_snmp', 'comments']
  117. class DeviceNestedSerializer(DeviceSerializer):
  118. class Meta(DeviceSerializer.Meta):
  119. model = Device
  120. fields = ['id', 'name']
  121. #
  122. # Console server ports
  123. #
  124. class ConsoleServerPortSerializer(serializers.ModelSerializer):
  125. device = DeviceNestedSerializer()
  126. class Meta:
  127. model = ConsoleServerPort
  128. fields = ['id', 'device', 'name', 'connected_console']
  129. class ConsoleServerPortNestedSerializer(ConsoleServerPortSerializer):
  130. class Meta(ConsoleServerPortSerializer.Meta):
  131. fields = ['id', 'device', 'name']
  132. #
  133. # Console ports
  134. #
  135. class ConsolePortSerializer(serializers.ModelSerializer):
  136. device = DeviceNestedSerializer()
  137. cs_port = ConsoleServerPortNestedSerializer()
  138. class Meta:
  139. model = ConsolePort
  140. fields = ['id', 'device', 'name', 'cs_port', 'connection_status']
  141. class ConsolePortNestedSerializer(ConsolePortSerializer):
  142. class Meta(ConsolePortSerializer.Meta):
  143. fields = ['id', 'device', 'name']
  144. #
  145. # Power outlets
  146. #
  147. class PowerOutletSerializer(serializers.ModelSerializer):
  148. device = DeviceNestedSerializer()
  149. class Meta:
  150. model = PowerOutlet
  151. fields = ['id', 'device', 'name', 'connected_port']
  152. class PowerOutletNestedSerializer(PowerOutletSerializer):
  153. class Meta(PowerOutletSerializer.Meta):
  154. fields = ['id', 'device', 'name']
  155. #
  156. # Power ports
  157. #
  158. class PowerPortSerializer(serializers.ModelSerializer):
  159. device = DeviceNestedSerializer()
  160. power_outlet = PowerOutletNestedSerializer()
  161. class Meta:
  162. model = PowerPort
  163. fields = ['id', 'device', 'name', 'power_outlet', 'connection_status']
  164. class PowerPortNestedSerializer(PowerPortSerializer):
  165. class Meta(PowerPortSerializer.Meta):
  166. fields = ['id', 'device', 'name']
  167. #
  168. # Interfaces
  169. #
  170. class InterfaceSerializer(serializers.ModelSerializer):
  171. device = DeviceNestedSerializer()
  172. form_factor = serializers.ReadOnlyField(source='get_form_factor_display')
  173. class Meta:
  174. model = Interface
  175. fields = ['id', 'device', 'name', 'form_factor', 'mgmt_only', 'description', 'is_connected']
  176. class InterfaceNestedSerializer(InterfaceSerializer):
  177. form_factor = serializers.ReadOnlyField(source='get_form_factor_display')
  178. class Meta(InterfaceSerializer.Meta):
  179. fields = ['id', 'device', 'name']
  180. class InterfaceDetailSerializer(InterfaceSerializer):
  181. connected_interface = InterfaceSerializer(source='get_connected_interface')
  182. class Meta(InterfaceSerializer.Meta):
  183. fields = ['id', 'device', 'name', 'form_factor', 'mgmt_only', 'description', 'is_connected',
  184. 'connected_interface']
  185. #
  186. # Interface connections
  187. #
  188. class InterfaceConnectionSerializer(serializers.ModelSerializer):
  189. class Meta:
  190. model = InterfaceConnection
  191. fields = ['id', 'interface_a', 'interface_b', 'connection_status']