mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-20 19:19:22 -06:00
#9627: Fix calculation of available VIDs
This commit is contained in:
parent
a3edc0472a
commit
52692d49b6
@ -90,42 +90,45 @@ def add_available_ipaddresses(prefix, ipaddress_list, is_pool=False):
|
|||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
def available_vlans_from_range(vlans, vlan_group, vlan_range):
|
def available_vlans_from_range(vlans, vlan_group, vid_range):
|
||||||
"""
|
"""
|
||||||
Create fake records for all gaps between used VLANs
|
Create fake records for all gaps between used VLANs
|
||||||
"""
|
"""
|
||||||
min_vid = int(vlan_range.lower) if vlan_range else VLAN_VID_MIN
|
min_vid = int(vid_range.lower) if vid_range else VLAN_VID_MIN
|
||||||
max_vid = int(vlan_range.upper) if vlan_range else VLAN_VID_MAX
|
max_vid = int(vid_range.upper) if vid_range else VLAN_VID_MAX
|
||||||
|
|
||||||
if not vlans:
|
if not vlans:
|
||||||
return [{
|
return [{
|
||||||
'vid': min_vid,
|
'vid': min_vid,
|
||||||
'vlan_group': vlan_group,
|
'vlan_group': vlan_group,
|
||||||
'available': max_vid - min_vid + 1
|
'available': max_vid - min_vid
|
||||||
}]
|
}]
|
||||||
|
|
||||||
prev_vid = max_vid
|
prev_vid = min_vid - 1
|
||||||
new_vlans = []
|
new_vlans = []
|
||||||
for vlan in vlans:
|
for vlan in vlans:
|
||||||
|
|
||||||
|
# Ignore VIDs outside the range
|
||||||
|
if not min_vid <= vlan.vid < max_vid:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Annotate any available VIDs between the previous (or minimum) VID
|
||||||
|
# and the current VID
|
||||||
if vlan.vid - prev_vid > 1:
|
if vlan.vid - prev_vid > 1:
|
||||||
new_vlans.append({
|
new_vlans.append({
|
||||||
'vid': prev_vid + 1,
|
'vid': prev_vid + 1,
|
||||||
'vlan_group': vlan_group,
|
'vlan_group': vlan_group,
|
||||||
'available': vlan.vid - prev_vid - 1,
|
'available': vlan.vid - prev_vid - 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
prev_vid = vlan.vid
|
prev_vid = vlan.vid
|
||||||
|
|
||||||
if vlans[0].vid > min_vid:
|
# Annotate any remaining available VLANs
|
||||||
new_vlans.append({
|
|
||||||
'vid': min_vid,
|
|
||||||
'vlan_group': vlan_group,
|
|
||||||
'available': vlans[0].vid - min_vid,
|
|
||||||
})
|
|
||||||
if prev_vid < max_vid:
|
if prev_vid < max_vid:
|
||||||
new_vlans.append({
|
new_vlans.append({
|
||||||
'vid': prev_vid + 1,
|
'vid': prev_vid + 1,
|
||||||
'vlan_group': vlan_group,
|
'vlan_group': vlan_group,
|
||||||
'available': max_vid - prev_vid,
|
'available': max_vid - prev_vid - 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
return new_vlans
|
return new_vlans
|
||||||
@ -136,8 +139,8 @@ def add_available_vlans(vlans, vlan_group):
|
|||||||
Create fake records for all gaps between used VLANs
|
Create fake records for all gaps between used VLANs
|
||||||
"""
|
"""
|
||||||
new_vlans = []
|
new_vlans = []
|
||||||
for vlan_range in vlan_group.vid_ranges:
|
for vid_range in vlan_group.vid_ranges:
|
||||||
new_vlans.extend(available_vlans_from_range(vlans, vlan_group, vlan_range))
|
new_vlans.extend(available_vlans_from_range(vlans, vlan_group, vid_range))
|
||||||
|
|
||||||
vlans = list(vlans) + new_vlans
|
vlans = list(vlans) + new_vlans
|
||||||
vlans.sort(key=lambda v: v.vid if type(v) is VLAN else v['vid'])
|
vlans.sort(key=lambda v: v.vid if type(v) is VLAN else v['vid'])
|
||||||
|
Loading…
Reference in New Issue
Block a user