def calculate_free_ips(global_variable):
import itertools
from netaddr import IPSet, IPAddress
global_variable.free_ip_lock = True
global_variable.app.logger.debug('Calculating free ips...')
networks = {}
for ip in list(itertools.chain(*[ip_ for ip_ in global_variable.used_ips])):
net = '{network}.0/24'.format(network='.'.join(ip.split('.')[0:3]))
if net not in networks.keys():
networks[net] = IPSet([net])
if IPAddress(ip) in networks[net]:
networks[net].remove(IPAddress(ip))
for x in xrange(0, 11):
networks[net].remove(
IPAddress(
'{network}.{last_oct}'.format(network='.'.join(ip.split('.')[0:3]),
last_oct=x)
)
)
global_variable.free_ips = {key: [x for x in value] for key, value in networks.items()}
global_variable.free_ip_lock = False
return True
评论列表
文章目录