nested_serializers.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. from rest_framework import serializers
  2. from ipam import models
  3. from ipam.models.l2vpn import L2VPNTermination, L2VPN
  4. from netbox.api import WritableNestedSerializer
  5. __all__ = [
  6. 'NestedAggregateSerializer',
  7. 'NestedASNSerializer',
  8. 'NestedFHRPGroupSerializer',
  9. 'NestedFHRPGroupAssignmentSerializer',
  10. 'NestedIPAddressSerializer',
  11. 'NestedIPRangeSerializer',
  12. 'NestedL2VPNSerializer',
  13. 'NestedL2VPNTerminationSerializer',
  14. 'NestedPrefixSerializer',
  15. 'NestedRIRSerializer',
  16. 'NestedRoleSerializer',
  17. 'NestedRouteTargetSerializer',
  18. 'NestedServiceSerializer',
  19. 'NestedServiceTemplateSerializer',
  20. 'NestedVLANGroupSerializer',
  21. 'NestedVLANSerializer',
  22. 'NestedVRFSerializer',
  23. ]
  24. #
  25. # ASNs
  26. #
  27. class NestedASNSerializer(WritableNestedSerializer):
  28. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:asn-detail')
  29. class Meta:
  30. model = models.ASN
  31. fields = ['id', 'url', 'display', 'asn']
  32. #
  33. # VRFs
  34. #
  35. class NestedVRFSerializer(WritableNestedSerializer):
  36. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vrf-detail')
  37. prefix_count = serializers.IntegerField(read_only=True)
  38. class Meta:
  39. model = models.VRF
  40. fields = ['id', 'url', 'display', 'name', 'rd', 'prefix_count']
  41. #
  42. # Route targets
  43. #
  44. class NestedRouteTargetSerializer(WritableNestedSerializer):
  45. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:routetarget-detail')
  46. class Meta:
  47. model = models.RouteTarget
  48. fields = ['id', 'url', 'display', 'name']
  49. #
  50. # RIRs/aggregates
  51. #
  52. class NestedRIRSerializer(WritableNestedSerializer):
  53. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:rir-detail')
  54. aggregate_count = serializers.IntegerField(read_only=True)
  55. class Meta:
  56. model = models.RIR
  57. fields = ['id', 'url', 'display', 'name', 'slug', 'aggregate_count']
  58. class NestedAggregateSerializer(WritableNestedSerializer):
  59. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:aggregate-detail')
  60. family = serializers.IntegerField(read_only=True)
  61. class Meta:
  62. model = models.Aggregate
  63. fields = ['id', 'url', 'display', 'family', 'prefix']
  64. #
  65. # FHRP groups
  66. #
  67. class NestedFHRPGroupSerializer(WritableNestedSerializer):
  68. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:fhrpgroup-detail')
  69. class Meta:
  70. model = models.FHRPGroup
  71. fields = ['id', 'url', 'display', 'protocol', 'group_id']
  72. class NestedFHRPGroupAssignmentSerializer(WritableNestedSerializer):
  73. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:fhrpgroupassignment-detail')
  74. class Meta:
  75. model = models.FHRPGroupAssignment
  76. fields = ['id', 'url', 'display', 'interface_type', 'interface_id', 'group_id', 'priority']
  77. #
  78. # VLANs
  79. #
  80. class NestedRoleSerializer(WritableNestedSerializer):
  81. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:role-detail')
  82. prefix_count = serializers.IntegerField(read_only=True)
  83. vlan_count = serializers.IntegerField(read_only=True)
  84. class Meta:
  85. model = models.Role
  86. fields = ['id', 'url', 'display', 'name', 'slug', 'prefix_count', 'vlan_count']
  87. class NestedVLANGroupSerializer(WritableNestedSerializer):
  88. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlangroup-detail')
  89. vlan_count = serializers.IntegerField(read_only=True)
  90. class Meta:
  91. model = models.VLANGroup
  92. fields = ['id', 'url', 'display', 'name', 'slug', 'vlan_count']
  93. class NestedVLANSerializer(WritableNestedSerializer):
  94. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlan-detail')
  95. class Meta:
  96. model = models.VLAN
  97. fields = ['id', 'url', 'display', 'vid', 'name']
  98. #
  99. # Prefixes
  100. #
  101. class NestedPrefixSerializer(WritableNestedSerializer):
  102. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:prefix-detail')
  103. family = serializers.IntegerField(read_only=True)
  104. _depth = serializers.IntegerField(read_only=True)
  105. class Meta:
  106. model = models.Prefix
  107. fields = ['id', 'url', 'display', 'family', 'prefix', '_depth']
  108. #
  109. # IP ranges
  110. #
  111. class NestedIPRangeSerializer(WritableNestedSerializer):
  112. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:iprange-detail')
  113. family = serializers.IntegerField(read_only=True)
  114. class Meta:
  115. model = models.IPRange
  116. fields = ['id', 'url', 'display', 'family', 'start_address', 'end_address']
  117. #
  118. # IP addresses
  119. #
  120. class NestedIPAddressSerializer(WritableNestedSerializer):
  121. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
  122. family = serializers.IntegerField(read_only=True)
  123. class Meta:
  124. model = models.IPAddress
  125. fields = ['id', 'url', 'display', 'family', 'address']
  126. #
  127. # Services
  128. #
  129. class NestedServiceTemplateSerializer(WritableNestedSerializer):
  130. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:servicetemplate-detail')
  131. class Meta:
  132. model = models.ServiceTemplate
  133. fields = ['id', 'url', 'display', 'name', 'protocol', 'ports']
  134. class NestedServiceSerializer(WritableNestedSerializer):
  135. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:service-detail')
  136. class Meta:
  137. model = models.Service
  138. fields = ['id', 'url', 'display', 'name', 'protocol', 'ports']
  139. #
  140. # L2VPN
  141. #
  142. class NestedL2VPNSerializer(WritableNestedSerializer):
  143. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:l2vpn-detail')
  144. class Meta:
  145. model = L2VPN
  146. fields = [
  147. 'id', 'url', 'display', 'identifier', 'name', 'slug', 'type'
  148. ]
  149. class NestedL2VPNTerminationSerializer(WritableNestedSerializer):
  150. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:l2vpntermination-detail')
  151. l2vpn = NestedL2VPNSerializer()
  152. class Meta:
  153. model = L2VPNTermination
  154. fields = [
  155. 'id', 'url', 'display', 'l2vpn'
  156. ]