def pop_ip(env=None):
"""Picks an ip from env['provider_net'].
It will first take ips in the extra_ips if possible.
extra_ips is a list of isolated ips whereas ips described
by the [provider_net.start, provider.end] range is a continuous
list of ips.
"""
# Construct the pool of ips
extra_ips = env['provider_net'].get('extra_ips', [])
if len(extra_ips) > 0:
ip = extra_ips.pop()
env['provider_net']['extra_ips'] = extra_ips
return ip
ips = list(IPRange(env['provider_net']['start'],
env['provider_net']['end']))
# Get the next ip
ip = str(ips.pop())
# Remove this ip from the env
env['provider_net']['end'] = str(ips.pop())
return ip
评论列表
文章目录