def validatePhysicalNetworkVlan(self, physicalNetworkId, vlan): """Validate whether the physical network has the updated vlan params: @physicalNetworkId: The id of physical network which needs to be validated @vlan: vlan with which physical network was updated. This should match with the vlan of listed physical network Raise Exception if not matched """ self.debug("Listing physical networks with id: %s" % physicalNetworkId) physicalnetworks = PhysicalNetwork.list(self.apiclient, id=physicalNetworkId) self.assertTrue(isinstance(physicalnetworks, list), "PhysicalNetwork.list should return a \ valid list object") self.assertTrue(len(physicalnetworks) > 0, "physical networks list should not be empty") self.debug("Checking if physical network vlan matches with the passed vlan") vlans = xsplit(vlan,[',']) for virtualLan in vlans: self.assert_(physicalnetworks[0].vlan.find(virtualLan) != -1, "vlan range %s \ is not present in physical network: %s" % (virtualLan, physicalNetworkId)) return
def get_free_vlan(apiclient, zoneid): """ Find an unallocated VLAN outside the range allocated to the physical network. @note: This does not guarantee that the VLAN is available for use in the deployment's network gear @return: physical_network, shared_vlan_tag """ list_physical_networks_response = PhysicalNetwork.list(apiclient, zoneid=zoneid) assert isinstance(list_physical_networks_response, list) assert len(list_physical_networks_response) > 0, "No physical networks found in zone %s" % zoneid physical_network = list_physical_networks_response[0] networks = list_networks(apiclient, zoneid=zoneid, type="Shared") usedVlanIds = [] if isinstance(networks, list) and len(networks) > 0: usedVlanIds = [int(nw.vlan) for nw in networks if nw.vlan != "untagged"] if hasattr(physical_network, "vlan") is False: while True: shared_ntwk_vlan = random.randrange(1, 4095) if shared_ntwk_vlan in usedVlanIds: continue else: break else: vlans = xsplit(physical_network.vlan, ["-", ","]) assert len(vlans) > 0 assert int(vlans[0]) < int(vlans[-1]), "VLAN range %s was improperly split" % physical_network.vlan # Assuming random function will give different integer each time retriesCount = 20 shared_ntwk_vlan = None while True: if retriesCount == 0: break free_vlan = int(vlans[-1]) + random.randrange(1, 20) if free_vlan > 4095: free_vlan = int(vlans[0]) - random.randrange(1, 20) if free_vlan < 0 or (free_vlan in usedVlanIds): retriesCount -= 1 continue else: shared_ntwk_vlan = free_vlan break return physical_network, shared_ntwk_vlan
def validatePhysicalNetworkVlan(self, physicalNetworkId, vlan): """Validate whether the physical network has the updated vlan params: @physicalNetworkId: The id of physical network which needs to be validated @vlan: vlan with which physical network was updated. This should match with the vlan of listed physical network Raise Exception if not matched """ self.debug("Listing physical networks with id: %s" % physicalNetworkId) physicalnetworks = PhysicalNetwork.list(self.apiclient, id=physicalNetworkId) self.assertTrue( isinstance(physicalnetworks, list), "PhysicalNetwork.list should return a \ valid list object") self.assertTrue( len(physicalnetworks) > 0, "physical networks list should not be empty") self.debug( "Checking if physical network vlan matches with the passed vlan") vlans = xsplit(vlan, [',']) for virtualLan in vlans: self.assert_( physicalnetworks[0].vlan.find(virtualLan) != -1, "vlan range %s \ is not present in physical network: %s" % (virtualLan, physicalNetworkId)) return
def setNonContiguousVlanIds(apiclient, zoneid): """ Form the non contiguous ranges based on currently assigned range in physical network """ NonContigVlanIdsAcquired = False list_physical_networks_response = PhysicalNetwork.list(apiclient, zoneid=zoneid) assert isinstance(list_physical_networks_response, list) assert len(list_physical_networks_response) > 0, "No physical networks found in zone %s" % zoneid for physical_network in list_physical_networks_response: vlans = xsplit(physical_network.vlan, ["-", ","]) assert len(vlans) > 0 assert int(vlans[0]) < int(vlans[-1]), "VLAN range %s was improperly split" % physical_network.vlan # Keep some gap between existing vlan and the new vlans which we are going to add # So that they are non contiguous non_contig_end_vlan_id = int(vlans[-1]) + 6 non_contig_start_vlan_id = int(vlans[0]) - 6 # Form ranges which are consecutive to existing ranges but not immediately contiguous # There should be gap in between existing range and new non contiguous # ranage # If you can't add range after existing range, because it's crossing 4095, then # select VLAN ids before the existing range such that they are greater than 0, and # then add this non contiguoud range vlan = {"partial_range": ["", ""], "full_range": ""} if non_contig_end_vlan_id < 4095: vlan["partial_range"][0] = str(non_contig_end_vlan_id - 4) + "-" + str(non_contig_end_vlan_id - 3) vlan["partial_range"][1] = str(non_contig_end_vlan_id - 1) + "-" + str(non_contig_end_vlan_id) vlan["full_range"] = str(non_contig_end_vlan_id - 4) + "-" + str(non_contig_end_vlan_id) NonContigVlanIdsAcquired = True elif non_contig_start_vlan_id > 0: vlan["partial_range"][0] = str(non_contig_start_vlan_id) + "-" + str(non_contig_start_vlan_id + 1) vlan["partial_range"][1] = str(non_contig_start_vlan_id + 3) + "-" + str(non_contig_start_vlan_id + 4) vlan["full_range"] = str(non_contig_start_vlan_id) + "-" + str(non_contig_start_vlan_id + 4) NonContigVlanIdsAcquired = True else: NonContigVlanIdsAcquired = False # If failed to get relevant vlan ids, continue to next physical network # else break from loop as we have hot the non contiguous vlan ids for # the test purpose if not NonContigVlanIdsAcquired: continue else: break # If even through looping from all existing physical networks, failed to get relevant non # contiguous vlan ids, then fail the test case if not NonContigVlanIdsAcquired: return None, None return physical_network, vlan
def get_free_vlan(apiclient, zoneid): """ Find an unallocated VLAN outside the range allocated to the physical network. @note: This does not guarantee that the VLAN is available for use in the deployment's network gear @return: physical_network, shared_vlan_tag """ list_physical_networks_response = PhysicalNetwork.list( apiclient, zoneid=zoneid ) assert isinstance(list_physical_networks_response, list) assert len( list_physical_networks_response) > 0, "No physical networks found in zone %s" % zoneid physical_network = list_physical_networks_response[0] networks = list_networks(apiclient, zoneid=zoneid, type='Shared') usedVlanIds = [] if isinstance(networks, list) and len(networks) > 0: usedVlanIds = [int(nw.vlan) for nw in networks if nw.vlan != "untagged"] if hasattr(physical_network, "vlan") is False: while True: shared_ntwk_vlan = random.randrange(1, 4095) if shared_ntwk_vlan in usedVlanIds: continue else: break else: vlans = xsplit(physical_network.vlan, ['-', ',']) assert len(vlans) > 0 assert int(vlans[0]) < int( vlans[-1]), "VLAN range %s was improperly split" % physical_network.vlan # Assuming random function will give different integer each time retriesCount = 20 shared_ntwk_vlan = None while True: if retriesCount == 0: break free_vlan = int(vlans[-1]) + random.randrange(1, 20) if free_vlan > 4095: free_vlan = int(vlans[0]) - random.randrange(1, 20) if free_vlan < 0 or (free_vlan in usedVlanIds): retriesCount -= 1 continue else: shared_ntwk_vlan = free_vlan break return physical_network, shared_ntwk_vlan
def setNonContiguousVlanIds(apiclient, zoneid): """ Form the non contiguous ranges based on currently assigned range in physical network """ NonContigVlanIdsAcquired = False list_physical_networks_response = PhysicalNetwork.list( apiclient, zoneid=zoneid ) assert isinstance(list_physical_networks_response, list) assert len( list_physical_networks_response) > 0, "No physical networks found in zone %s" % zoneid for physical_network in list_physical_networks_response: vlans = xsplit(physical_network.vlan, ['-', ',']) assert len(vlans) > 0 assert int(vlans[0]) < int( vlans[-1]), "VLAN range %s was improperly split" % physical_network.vlan # Keep some gap between existing vlan and the new vlans which we are going to add # So that they are non contiguous non_contig_end_vlan_id = int(vlans[-1]) + 6 non_contig_start_vlan_id = int(vlans[0]) - 6 # Form ranges which are consecutive to existing ranges but not immediately contiguous # There should be gap in between existing range and new non contiguous # ranage # If you can't add range after existing range, because it's crossing 4095, then # select VLAN ids before the existing range such that they are greater than 0, and # then add this non contiguoud range vlan = {"partial_range": ["", ""], "full_range": ""} if non_contig_end_vlan_id < 4095: vlan["partial_range"][0] = str( non_contig_end_vlan_id - 4) + '-' + str(non_contig_end_vlan_id - 3) vlan["partial_range"][1] = str( non_contig_end_vlan_id - 1) + '-' + str(non_contig_end_vlan_id) vlan["full_range"] = str( non_contig_end_vlan_id - 4) + '-' + str(non_contig_end_vlan_id) NonContigVlanIdsAcquired = True elif non_contig_start_vlan_id > 0: vlan["partial_range"][0] = str( non_contig_start_vlan_id) + '-' + str(non_contig_start_vlan_id + 1) vlan["partial_range"][1] = str( non_contig_start_vlan_id + 3) + '-' + str(non_contig_start_vlan_id + 4) vlan["full_range"] = str( non_contig_start_vlan_id) + '-' + str(non_contig_start_vlan_id + 4) NonContigVlanIdsAcquired = True else: NonContigVlanIdsAcquired = False # If failed to get relevant vlan ids, continue to next physical network # else break from loop as we have hot the non contiguous vlan ids for # the test purpose if not NonContigVlanIdsAcquired: continue else: break # If even through looping from all existing physical networks, failed to get relevant non # contiguous vlan ids, then fail the test case if not NonContigVlanIdsAcquired: return None, None return physical_network, vlan