def _get_available_subnets(prefix_or_prefixes, used_prefixes):
"""Get available prefixes within a list of CIDR addresses, based on what
prefixes are in use. E.g. this is `get_available_subnets`, but with
explicit dependency injection.
Args:
prefix_or_prefixes: a single or a list of prefixes ("10.0.0.0/8") or
IPy.IP objects
used_prefixes: prefixes that are in use
Returns:
An iterable IPy.IPSet of available addresses within prefix_or_prefixes
"""
if not isinstance(prefix_or_prefixes, list):
prefix_or_prefixes = [prefix_or_prefixes]
base_prefixes = [str(prefix) for prefix in prefix_or_prefixes]
acc = IPSet([IP(prefix) for prefix in prefix_or_prefixes])
used_prefixes = IPSet([IP(used) for used in used_prefixes])
# remove used prefixes
acc.discard(used_prefixes)
# filter away original prefixes
return sorted([ip for ip in acc if str(ip) not in base_prefixes])
评论列表
文章目录