# if they use QinQ or a vxlan overlay, for example
allow_overlapping = models.BooleanField()
- def get_vlan(self, count=1):
+ def get_vlans(self, count=1):
"""
- Return the ID of available vlans, but does not reserve them.
+ Return the IDs of available vlans as a list[int], but does not reserve them.
Will throw index exception if not enough vlans are available.
- If count == 1, the return value is an int. Otherwise, it is a list of ints.
+ Always returns a list of ints
"""
allocated = []
vlans = json.loads(self.vlans)
lab.vlan_manager.reserve_public_vlan(public_net.vlan)
network.vlan_id = public_net.vlan
else:
- private_net = lab.vlan_manager.get_vlan()
- if not private_net:
+ private_nets = lab.vlan_manager.get_vlans(count=1)
+ if not private_nets:
raise Exception("No more generic vlans are available")
- lab.vlan_manager.reserve_vlans([private_net])
- network.vlan_id = private_net
+ lab.vlan_manager.reserve_vlans(private_nets)
+ network.vlan_id = private_nets[0]
network.save()
return network
vlan_manager.reserve_public_vlan(public_net.vlan)
networks[network.name] = public_net.vlan
else:
- vlan = vlan_manager.get_vlan()
- vlan_manager.reserve_vlans(vlan)
- networks[network.name] = vlan
+ # already throws if can't get requested count, so can always index in @ 0
+ vlans = vlan_manager.get_vlans(count=1)
+ vlan_manager.reserve_vlans(vlans[0])
+ networks[network.name] = vlans[0]
return networks
def instantiateTemplate(self, resource_template):
if lab is None or lab.vlan_manager is None:
return None
try:
- vlans = lab.vlan_manager.get_vlan(count=lab.vlan_manager.block_size)
+ vlans = lab.vlan_manager.get_vlans(count=lab.vlan_manager.block_size)
self.repo_put(self.repo.VLANS, vlans)
return vlans
except Exception: