serializers.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. from rest_framework import serializers
  2. from dcim.api.serializers import SiteNestedSerializer, InterfaceNestedSerializer
  3. from extras.api.serializers import CustomFieldSerializer
  4. from ipam.models import VRF, Role, RIR, Aggregate, Prefix, IPAddress, VLAN, VLANGroup
  5. from tenancy.api.serializers import TenantNestedSerializer
  6. #
  7. # VRFs
  8. #
  9. class VRFSerializer(CustomFieldSerializer, serializers.ModelSerializer):
  10. tenant = TenantNestedSerializer()
  11. class Meta:
  12. model = VRF
  13. fields = ['id', 'name', 'rd', 'tenant', 'enforce_unique', 'description', 'custom_fields']
  14. class VRFNestedSerializer(VRFSerializer):
  15. class Meta(VRFSerializer.Meta):
  16. fields = ['id', 'name', 'rd']
  17. class VRFTenantSerializer(VRFSerializer):
  18. """
  19. Include tenant serializer. Useful for determining tenant inheritance for Prefixes and IPAddresses.
  20. """
  21. class Meta(VRFSerializer.Meta):
  22. fields = ['id', 'name', 'rd', 'tenant']
  23. #
  24. # Roles
  25. #
  26. class RoleSerializer(serializers.ModelSerializer):
  27. class Meta:
  28. model = Role
  29. fields = ['id', 'name', 'slug', 'weight']
  30. class RoleNestedSerializer(RoleSerializer):
  31. class Meta(RoleSerializer.Meta):
  32. fields = ['id', 'name', 'slug']
  33. #
  34. # RIRs
  35. #
  36. class RIRSerializer(serializers.ModelSerializer):
  37. class Meta:
  38. model = RIR
  39. fields = ['id', 'name', 'slug']
  40. class RIRNestedSerializer(RIRSerializer):
  41. class Meta(RIRSerializer.Meta):
  42. pass
  43. #
  44. # Aggregates
  45. #
  46. class AggregateSerializer(CustomFieldSerializer, serializers.ModelSerializer):
  47. rir = RIRNestedSerializer()
  48. class Meta:
  49. model = Aggregate
  50. fields = ['id', 'family', 'prefix', 'rir', 'date_added', 'description', 'custom_fields']
  51. class AggregateNestedSerializer(AggregateSerializer):
  52. class Meta(AggregateSerializer.Meta):
  53. fields = ['id', 'family', 'prefix']
  54. #
  55. # VLAN groups
  56. #
  57. class VLANGroupSerializer(serializers.ModelSerializer):
  58. site = SiteNestedSerializer()
  59. class Meta:
  60. model = VLANGroup
  61. fields = ['id', 'name', 'slug', 'site']
  62. class VLANGroupNestedSerializer(VLANGroupSerializer):
  63. class Meta(VLANGroupSerializer.Meta):
  64. fields = ['id', 'name', 'slug']
  65. #
  66. # VLANs
  67. #
  68. class VLANSerializer(CustomFieldSerializer, serializers.ModelSerializer):
  69. site = SiteNestedSerializer()
  70. group = VLANGroupNestedSerializer()
  71. tenant = TenantNestedSerializer()
  72. role = RoleNestedSerializer()
  73. class Meta:
  74. model = VLAN
  75. fields = ['id', 'site', 'group', 'vid', 'name', 'tenant', 'status', 'role', 'description', 'display_name',
  76. 'custom_fields']
  77. class VLANNestedSerializer(VLANSerializer):
  78. class Meta(VLANSerializer.Meta):
  79. fields = ['id', 'vid', 'name', 'display_name']
  80. #
  81. # Prefixes
  82. #
  83. class PrefixSerializer(CustomFieldSerializer, serializers.ModelSerializer):
  84. site = SiteNestedSerializer()
  85. vrf = VRFTenantSerializer()
  86. tenant = TenantNestedSerializer()
  87. vlan = VLANNestedSerializer()
  88. role = RoleNestedSerializer()
  89. class Meta:
  90. model = Prefix
  91. fields = ['id', 'family', 'prefix', 'site', 'vrf', 'tenant', 'vlan', 'status', 'role', 'description',
  92. 'custom_fields']
  93. class PrefixNestedSerializer(PrefixSerializer):
  94. class Meta(PrefixSerializer.Meta):
  95. fields = ['id', 'family', 'prefix']
  96. #
  97. # IP addresses
  98. #
  99. class IPAddressSerializer(CustomFieldSerializer, serializers.ModelSerializer):
  100. vrf = VRFTenantSerializer()
  101. tenant = TenantNestedSerializer()
  102. interface = InterfaceNestedSerializer()
  103. class Meta:
  104. model = IPAddress
  105. fields = ['id', 'family', 'address', 'vrf', 'tenant', 'interface', 'description', 'nat_inside', 'nat_outside',
  106. 'custom_fields']
  107. class IPAddressNestedSerializer(IPAddressSerializer):
  108. class Meta(IPAddressSerializer.Meta):
  109. fields = ['id', 'family', 'address']
  110. IPAddressSerializer._declared_fields['nat_inside'] = IPAddressNestedSerializer()
  111. IPAddressSerializer._declared_fields['nat_outside'] = IPAddressNestedSerializer()