def verify_vlan_range(vlan_range): """Verify a VLAN range is valid. :param vlan_range: An iterable who's 0 index is the min tunnel range and who's 1 index is the max tunnel range. :returns: None if the vlan_range is valid. :raises: NetworkVlanRangeError if vlan_range is not valid. """ for vlan_tag in vlan_range: if not is_valid_vlan_tag(vlan_tag): _raise_invalid_tag(str(vlan_tag), vlan_range) if vlan_range[1] < vlan_range[0]: raise exceptions.NetworkVlanRangeError( vlan_range=vlan_range, error=_("End of VLAN range is less than start of VLAN range"))
def parse_network_vlan_range(network_vlan_range): """Parse a well formed network VLAN range string. The network VLAN range string has the format: network[:vlan_begin:vlan_end] :param network_vlan_range: The network VLAN range string to parse. :returns: A tuple who's 1st element is the network name and 2nd element is the VLAN range parsed from network_vlan_range. :raises: NetworkVlanRangeError if network_vlan_range is malformed. PhysicalNetworkNameError if network_vlan_range is missing a network name. """ entry = network_vlan_range.strip() if ':' in entry: if entry.count(':') != 2: raise exceptions.NetworkVlanRangeError( vlan_range=entry, error=_("Need exactly two values for VLAN range")) network, vlan_min, vlan_max = entry.split(':') if not network: raise exceptions.PhysicalNetworkNameError() try: vlan_min = int(vlan_min) except ValueError: _raise_invalid_tag(vlan_min, entry) try: vlan_max = int(vlan_max) except ValueError: _raise_invalid_tag(vlan_max, entry) vlan_range = (vlan_min, vlan_max) verify_vlan_range(vlan_range) return network, vlan_range else: return entry, None
def _raise_invalid_tag(vlan_str, vlan_range): """Raise an exception for invalid tag.""" raise exceptions.NetworkVlanRangeError( vlan_range=vlan_range, error=_("%s is not a valid VLAN tag") % vlan_str)