|
@@ -400,7 +400,7 @@ class AvailablePrefixesView(AvailableObjectsView):
|
|
|
class AvailableIPAddressesView(AvailableObjectsView):
|
|
class AvailableIPAddressesView(AvailableObjectsView):
|
|
|
queryset = IPAddress.objects.all()
|
|
queryset = IPAddress.objects.all()
|
|
|
read_serializer_class = serializers.AvailableIPSerializer
|
|
read_serializer_class = serializers.AvailableIPSerializer
|
|
|
- write_serializer_class = serializers.AvailableIPSerializer
|
|
|
|
|
|
|
+ write_serializer_class = serializers.AvailableIPRequestSerializer
|
|
|
advisory_lock_key = 'available-ips'
|
|
advisory_lock_key = 'available-ips'
|
|
|
|
|
|
|
|
def get_available_objects(self, parent, limit=None):
|
|
def get_available_objects(self, parent, limit=None):
|
|
@@ -421,8 +421,9 @@ class AvailableIPAddressesView(AvailableObjectsView):
|
|
|
def prep_object_data(self, requested_objects, available_objects, parent):
|
|
def prep_object_data(self, requested_objects, available_objects, parent):
|
|
|
available_ips = iter(available_objects)
|
|
available_ips = iter(available_objects)
|
|
|
for i, request_data in enumerate(requested_objects):
|
|
for i, request_data in enumerate(requested_objects):
|
|
|
|
|
+ prefix_length = request_data.pop('prefix_length', None) or parent.mask_length
|
|
|
request_data.update({
|
|
request_data.update({
|
|
|
- 'address': f'{next(available_ips)}/{parent.mask_length}',
|
|
|
|
|
|
|
+ 'address': f'{next(available_ips)}/{prefix_length}',
|
|
|
'vrf': parent.vrf.pk if parent.vrf else None,
|
|
'vrf': parent.vrf.pk if parent.vrf else None,
|
|
|
})
|
|
})
|
|
|
|
|
|
|
@@ -435,7 +436,7 @@ class AvailableIPAddressesView(AvailableObjectsView):
|
|
|
@extend_schema(
|
|
@extend_schema(
|
|
|
methods=["post"],
|
|
methods=["post"],
|
|
|
responses={201: serializers.IPAddressSerializer(many=True)},
|
|
responses={201: serializers.IPAddressSerializer(many=True)},
|
|
|
- request=serializers.IPAddressSerializer(many=True),
|
|
|
|
|
|
|
+ request=serializers.AvailableIPRequestSerializer(many=True),
|
|
|
)
|
|
)
|
|
|
def post(self, request, pk):
|
|
def post(self, request, pk):
|
|
|
return super().post(request, pk)
|
|
return super().post(request, pk)
|