serializers.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. from rest_framework import serializers
  2. from dcim.api.serializers import NestedDeviceSerializer, DeviceInterfaceSerializer, NestedSiteSerializer
  3. from extras.api.serializers import CustomFieldValueSerializer
  4. from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
  5. from tenancy.api.serializers import NestedTenantSerializer
  6. #
  7. # VRFs
  8. #
  9. class VRFSerializer(serializers.ModelSerializer):
  10. tenant = NestedTenantSerializer()
  11. custom_field_values = CustomFieldValueSerializer(many=True)
  12. class Meta:
  13. model = VRF
  14. fields = ['id', 'name', 'rd', 'tenant', 'enforce_unique', 'description', 'custom_field_values']
  15. class NestedVRFSerializer(serializers.ModelSerializer):
  16. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vrf-detail')
  17. class Meta:
  18. model = VRF
  19. fields = ['id', 'url', 'name', 'rd']
  20. class WritableVRFSerializer(serializers.ModelSerializer):
  21. class Meta:
  22. model = VRF
  23. fields = ['id', 'name', 'rd', 'tenant', 'enforce_unique', 'description']
  24. #
  25. # Roles
  26. #
  27. class RoleSerializer(serializers.ModelSerializer):
  28. class Meta:
  29. model = Role
  30. fields = ['id', 'name', 'slug', 'weight']
  31. class NestedRoleSerializer(serializers.ModelSerializer):
  32. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:role-detail')
  33. class Meta:
  34. model = Role
  35. fields = ['id', 'url', 'name', 'slug']
  36. #
  37. # RIRs
  38. #
  39. class RIRSerializer(serializers.ModelSerializer):
  40. class Meta:
  41. model = RIR
  42. fields = ['id', 'name', 'slug', 'is_private']
  43. class NestedRIRSerializer(serializers.ModelSerializer):
  44. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:rir-detail')
  45. class Meta:
  46. model = RIR
  47. fields = ['id', 'url', 'name', 'slug']
  48. #
  49. # Aggregates
  50. #
  51. class AggregateSerializer(serializers.ModelSerializer):
  52. rir = NestedRIRSerializer()
  53. custom_field_values = CustomFieldValueSerializer(many=True)
  54. class Meta:
  55. model = Aggregate
  56. fields = ['id', 'family', 'prefix', 'rir', 'date_added', 'description', 'custom_field_values']
  57. class NestedAggregateSerializer(serializers.ModelSerializer):
  58. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:aggregate-detail')
  59. class Meta(AggregateSerializer.Meta):
  60. model = Aggregate
  61. fields = ['id', 'url', 'family', 'prefix']
  62. class WritableAggregateSerializer(serializers.ModelSerializer):
  63. class Meta:
  64. model = Aggregate
  65. fields = ['id', 'family', 'prefix', 'rir', 'date_added', 'description']
  66. #
  67. # VLAN groups
  68. #
  69. class VLANGroupSerializer(serializers.ModelSerializer):
  70. site = NestedSiteSerializer()
  71. class Meta:
  72. model = VLANGroup
  73. fields = ['id', 'name', 'slug', 'site']
  74. class NestedVLANGroupSerializer(serializers.ModelSerializer):
  75. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlangroup-detail')
  76. class Meta:
  77. model = VLANGroup
  78. fields = ['id', 'url', 'name', 'slug']
  79. class WritableVLANGroupSerializer(serializers.ModelSerializer):
  80. class Meta:
  81. model = VLANGroup
  82. fields = ['id', 'name', 'slug', 'site']
  83. #
  84. # VLANs
  85. #
  86. class VLANSerializer(serializers.ModelSerializer):
  87. site = NestedSiteSerializer()
  88. group = NestedVLANGroupSerializer()
  89. tenant = NestedTenantSerializer()
  90. role = NestedRoleSerializer()
  91. custom_field_values = CustomFieldValueSerializer(many=True)
  92. class Meta:
  93. model = VLAN
  94. fields = [
  95. 'id', 'site', 'group', 'vid', 'name', 'tenant', 'status', 'role', 'description', 'display_name',
  96. 'custom_field_values',
  97. ]
  98. class NestedVLANSerializer(serializers.ModelSerializer):
  99. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlan-detail')
  100. class Meta:
  101. model = VLAN
  102. fields = ['id', 'url', 'vid', 'name', 'display_name']
  103. class WritableVLANSerializer(serializers.ModelSerializer):
  104. class Meta:
  105. model = VLAN
  106. fields = [
  107. 'id', 'site', 'group', 'vid', 'name', 'tenant', 'status', 'role', 'description',
  108. ]
  109. #
  110. # Prefixes
  111. #
  112. class PrefixSerializer(serializers.ModelSerializer):
  113. site = NestedSiteSerializer()
  114. vrf = NestedVRFSerializer()
  115. tenant = NestedTenantSerializer()
  116. vlan = NestedVLANSerializer()
  117. role = NestedRoleSerializer()
  118. custom_field_values = CustomFieldValueSerializer(many=True)
  119. class Meta:
  120. model = Prefix
  121. fields = [
  122. 'id', 'family', 'prefix', 'site', 'vrf', 'tenant', 'vlan', 'status', 'role', 'is_pool', 'description',
  123. 'custom_field_values',
  124. ]
  125. class NestedPrefixSerializer(serializers.ModelSerializer):
  126. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:prefix-detail')
  127. class Meta:
  128. model = Prefix
  129. fields = ['id', 'url', 'family', 'prefix']
  130. class WritablePrefixSerializer(serializers.ModelSerializer):
  131. class Meta:
  132. model = Prefix
  133. fields = [
  134. 'id', 'family', 'prefix', 'site', 'vrf', 'tenant', 'vlan', 'status', 'role', 'is_pool', 'description',
  135. ]
  136. #
  137. # IP addresses
  138. #
  139. class IPAddressSerializer(serializers.ModelSerializer):
  140. vrf = NestedVRFSerializer()
  141. tenant = NestedTenantSerializer()
  142. interface = DeviceInterfaceSerializer()
  143. custom_field_values = CustomFieldValueSerializer(many=True)
  144. class Meta:
  145. model = IPAddress
  146. fields = [
  147. 'id', 'family', 'address', 'vrf', 'tenant', 'status', 'interface', 'description', 'nat_inside',
  148. 'nat_outside', 'custom_field_values',
  149. ]
  150. class NestedIPAddressSerializer(serializers.ModelSerializer):
  151. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
  152. class Meta:
  153. model = IPAddress
  154. fields = ['id', 'url', 'family', 'address']
  155. IPAddressSerializer._declared_fields['nat_inside'] = NestedIPAddressSerializer()
  156. IPAddressSerializer._declared_fields['nat_outside'] = NestedIPAddressSerializer()
  157. class WritableIPAddressSerializer(serializers.ModelSerializer):
  158. class Meta:
  159. model = IPAddress
  160. fields = ['id', 'family', 'address', 'vrf', 'tenant', 'status', 'interface', 'description', 'nat_inside']
  161. #
  162. # Services
  163. #
  164. class ServiceSerializer(serializers.ModelSerializer):
  165. device = NestedDeviceSerializer()
  166. ipaddresses = NestedIPAddressSerializer(many=True)
  167. class Meta:
  168. model = Service
  169. fields = ['id', 'device', 'name', 'port', 'protocol', 'ipaddresses', 'description']
  170. class DeviceServiceSerializer(serializers.ModelSerializer):
  171. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:service-detail')
  172. ipaddresses = NestedIPAddressSerializer(many=True)
  173. class Meta:
  174. model = Service
  175. fields = ['id', 'url', 'name', 'port', 'protocol', 'ipaddresses', 'description']