mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-09 00:58:16 -06:00
9627 available_vlans
This commit is contained in:
parent
9bc2b8ebf8
commit
35d7ba113f
@ -11,6 +11,7 @@ from ipam.choices import *
|
||||
from ipam.constants import *
|
||||
from ipam.querysets import VLANQuerySet, VLANGroupQuerySet
|
||||
from netbox.models import OrganizationalModel, PrimaryModel
|
||||
from utilities.data import check_ranges_overlap
|
||||
from virtualization.models import VMInterface
|
||||
|
||||
__all__ = (
|
||||
@ -89,10 +90,14 @@ class VLANGroup(OrganizationalModel):
|
||||
if self.scope_id and not self.scope_type:
|
||||
raise ValidationError(_("Cannot set scope_id without scope_type."))
|
||||
|
||||
# Validate vlan ranges
|
||||
if check_ranges_overlap(self.vlan_id_ranges):
|
||||
raise ValidationError(_("Ranges cannot overlap."))
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self._total_vlan_ids = 0
|
||||
for vlan_range in self.vlan_id_ranges:
|
||||
self._total_vlan_ids += int(vlan_range.upper) - int(vlan_range.lower) + 1
|
||||
self._total_vlan_ids += vlan_range.upper - vlan_range.lower + 1
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
@ -4,6 +4,7 @@ from itertools import count, groupby
|
||||
__all__ = (
|
||||
'array_to_ranges',
|
||||
'array_to_string',
|
||||
'check_ranges_overlap',
|
||||
'deepmerge',
|
||||
'drange',
|
||||
'flatten_dict',
|
||||
@ -113,3 +114,18 @@ def drange(start, end, step=decimal.Decimal(1)):
|
||||
while start > end:
|
||||
yield start
|
||||
start += step
|
||||
|
||||
|
||||
def check_ranges_overlap(ranges):
|
||||
"""
|
||||
Check if array of ranges overlap
|
||||
"""
|
||||
|
||||
# sort the ranges in increasing order
|
||||
ranges.sort(key=lambda x: x.lower)
|
||||
|
||||
for i in range(1, len(ranges)):
|
||||
if (ranges[i - 1].upper > ranges[i].lower):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
@ -52,5 +52,5 @@ class NumericRangeArrayField(forms.CharField):
|
||||
values = []
|
||||
for dash_range in value.split(','):
|
||||
lower, upper = dash_range.split('-')
|
||||
values.append(NumericRange(lower, upper))
|
||||
values.append(NumericRange(int(lower), int(upper)))
|
||||
return values
|
||||
|
Loading…
Reference in New Issue
Block a user