def concat_networks(context, pool_1, pool_2): if pool_1.is_free and pool_2.is_free: network_1 = pool_to_network(pool_1) network_2 = pool_to_network(pool_2) if network_1.size == network_2.size: ipset = IPSet([network_1, network_2]) cidr = ipset.iter_cidrs()[0] pool_1.ip = cidr.first pool_1.netmask = cidr.netmask.value count = len(pool_to_network(pool_1)) pool_1.count = count pool_delete(context, pool_2.pool_id) concat_pool(context, pool_1)
def get(self, pool_name): parser.add_argument('netmask', type=int, help='set netmask parameter') parser.add_argument('stack_id', type=str, help='set stack_id parameter') parser.add_argument('stack_name', type=str, help='set stack_name parameter') args = parser.parse_args() net_mask = int(args['netmask']) stack_id = args['stack_id'] stack_name = args['stack_name'] if 0 > net_mask > 32: abort(400, message="Bad mask: %s" % net_mask) try: ip_pool = IPPoolV2() allocated_pool = ip_pool.allocate(net_mask, pool_name, stack_id, stack_name) return { 'pool_id': allocated_pool.pool_id, 'pool_group': pool_name, 'allocated_network': str(pool_to_network(allocated_pool)), 'allocated_range': pool_to_range(allocated_pool) } except IOError as e: abort(406, mesage="Not Acceptable %s" % e)
def get(self, pool_name): parser.add_argument("netmask", type=int, help="set netmask parameter") parser.add_argument("stack_id", type=str, help="set stack_id parameter") parser.add_argument("stack_name", type=str, help="set stack_name parameter") args = parser.parse_args() net_mask = int(args["netmask"]) stack_id = args["stack_id"] stack_name = args["stack_name"] if 0 > net_mask > 32: abort(400, message="Bad mask: %s" % net_mask) try: ip_pool = IPPoolV2() allocated_pool = ip_pool.allocate(net_mask, pool_name, stack_id, stack_name) return { "pool_id": allocated_pool.pool_id, "pool_group": pool_name, "allocated_network": str(pool_to_network(allocated_pool)), "allocated_range": pool_to_range(allocated_pool), } except IOError as e: abort(406, mesage="Not Acceptable %s" % e)
def allocate(self, netmask, net_group_name, stack_id=None, stack_name=None): context = get_session() network = IPNetwork('0.0.0.0/%s' % netmask) pool = db.api.free_pool_find_by_netmask_and_netgroup(context, network.netmask.value, net_group_name) ip_network = pool_to_network(pool) if ip_network.size == network.size: pool.is_free = False pool.stack_id = stack_id pool.stack_name = stack_name pool.save() allocated_pool = pool else: pool_list = list(ip_network.subnet(netmask)) allocated_network = pool_list[0] pool_list = IPSet(pool_list[1::]) allocated_pool = db.api.used_pool_add(context, {'initial_pool': pool.initial_pool, 'cidr': allocated_network, 'stack_id': stack_id, 'stack_name': stack_name}) for free_pool in pool_list.iter_cidrs(): db.api.free_pool_add(context, {'initial_pool': pool.initial_pool, 'cidr': free_pool}) db.api.pool_delete(context, pool.pool_id) logger.info('allocate pool id %s %s' % (allocated_pool.pool_id, allocated_network)) return allocated_pool
def allocate(self, netmask, net_group_name, stack_id=None, stack_name=None): context = get_session() network = IPNetwork('0.0.0.0/%s' % netmask) pool = db.api.free_pool_find_by_netmask_and_netgroup( context, network.netmask.value, net_group_name) ip_network = pool_to_network(pool) if ip_network.size == network.size: pool.is_free = False pool.stack_id = stack_id pool.stack_name = stack_name pool.save() allocated_pool = pool else: pool_list = list(ip_network.subnet(netmask)) allocated_network = pool_list[0] pool_list = IPSet(pool_list[1::]) allocated_pool = db.api.used_pool_add( context, { 'initial_pool': pool.initial_pool, 'cidr': allocated_network, 'stack_id': stack_id, 'stack_name': stack_name }) for free_pool in pool_list.iter_cidrs(): db.api.free_pool_add(context, { 'initial_pool': pool.initial_pool, 'cidr': free_pool }) db.api.pool_delete(context, pool.pool_id) logger.info('allocate pool id %s %s' % (allocated_pool.pool_id, allocated_network)) return allocated_pool