|
@@ -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
|
|
|
|
|
- max_vid = int(vlan_range.upper) if vlan_range else VLAN_VID_MAX
|
|
|
|
|
|
|
+ min_vid = int(vid_range.lower) if vid_range else VLAN_VID_MIN
|
|
|
|
|
+ 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:
|
|
|
|
|
- new_vlans.append({
|
|
|
|
|
- 'vid': min_vid,
|
|
|
|
|
- 'vlan_group': vlan_group,
|
|
|
|
|
- 'available': vlans[0].vid - min_vid,
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ # Annotate any remaining available VLANs
|
|
|
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:
|
|
|
|
|
- new_vlans.extend(available_vlans_from_range(vlans, vlan_group, vlan_range))
|
|
|
|
|
|
|
+ for vid_range in vlan_group.vid_ranges:
|
|
|
|
|
+ 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'])
|