mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-26 01:06:11 -06:00
Move get_next_available_prefix()
This commit is contained in:
parent
0a9dcd31d9
commit
76236945c8
@ -14,6 +14,7 @@ from circuits.models import Provider
|
||||
from dcim.models import Site
|
||||
from ipam import filtersets
|
||||
from ipam.models import *
|
||||
from ipam.utils import get_next_available_prefix
|
||||
from netbox.api.viewsets import NetBoxModelViewSet
|
||||
from netbox.api.viewsets.mixins import ObjectValidationMixin
|
||||
from netbox.config import get_config
|
||||
@ -349,16 +350,6 @@ class AvailableASNsView(AvailableObjectsView):
|
||||
return requested_objects
|
||||
|
||||
|
||||
# TODO: Move me
|
||||
def get_next_available(ipset, prefix_size):
|
||||
for available_prefix in ipset.iter_cidrs():
|
||||
if prefix_size >= available_prefix.prefixlen:
|
||||
allocated_prefix = f"{available_prefix.network}/{prefix_size}"
|
||||
ipset.remove(allocated_prefix)
|
||||
return allocated_prefix
|
||||
return None
|
||||
|
||||
|
||||
class AvailablePrefixesView(AvailableObjectsView):
|
||||
queryset = Prefix.objects.all()
|
||||
read_serializer_class = serializers.AvailablePrefixSerializer
|
||||
@ -374,7 +365,7 @@ class AvailablePrefixesView(AvailableObjectsView):
|
||||
def check_sufficient_available(self, requested_objects, available_objects):
|
||||
available_prefixes = IPSet(available_objects)
|
||||
for requested_object in requested_objects:
|
||||
if not get_next_available(available_prefixes, requested_object['prefix_length']):
|
||||
if not get_next_available_prefix(available_prefixes, requested_object['prefix_length']):
|
||||
return False
|
||||
return True
|
||||
|
||||
@ -389,7 +380,7 @@ class AvailablePrefixesView(AvailableObjectsView):
|
||||
for i, request_data in enumerate(requested_objects):
|
||||
|
||||
# Find the first available prefix equal to or larger than the requested size
|
||||
if allocated_prefix := get_next_available(available_prefixes, request_data['prefix_length']):
|
||||
if allocated_prefix := get_next_available_prefix(available_prefixes, request_data['prefix_length']):
|
||||
request_data.update({
|
||||
'prefix': allocated_prefix,
|
||||
'vrf': parent.vrf.pk if parent.vrf else None,
|
||||
|
@ -1,7 +1,15 @@
|
||||
import netaddr
|
||||
|
||||
from .constants import *
|
||||
from .models import ASN, Prefix, VLAN
|
||||
from .models import Prefix, VLAN
|
||||
|
||||
__all__ = (
|
||||
'add_available_ipaddresses',
|
||||
'add_available_vlans',
|
||||
'add_requested_prefixes',
|
||||
'get_next_available_prefix',
|
||||
'rebuild_prefixes',
|
||||
)
|
||||
|
||||
|
||||
def add_requested_prefixes(parent, prefix_list, show_available=True, show_assigned=True):
|
||||
@ -184,3 +192,15 @@ def rebuild_prefixes(vrf):
|
||||
|
||||
# Final flush of any remaining Prefixes
|
||||
Prefix.objects.bulk_update(update_queue, ['_depth', '_children'])
|
||||
|
||||
|
||||
def get_next_available_prefix(ipset, prefix_size):
|
||||
"""
|
||||
Given a prefix length, allocate the next available prefix from an IPSet.
|
||||
"""
|
||||
for available_prefix in ipset.iter_cidrs():
|
||||
if prefix_size >= available_prefix.prefixlen:
|
||||
allocated_prefix = f"{available_prefix.network}/{prefix_size}"
|
||||
ipset.remove(allocated_prefix)
|
||||
return allocated_prefix
|
||||
return None
|
||||
|
Loading…
Reference in New Issue
Block a user