def test_stats3(self): """ Check total stats are correct when adding and removing child prefixes from pool """ th = TestHelper() # add a pool pool1 = th.add_pool('test', 'assignment', 31, 112) # add some members to the pool p1 = th.add_prefix('1.0.0.0/24', 'reservation', 'test', pool_id=pool1.id) p2 = th.add_prefix('2001:db8::/48', 'reservation', 'test', pool_id=pool1.id) # add child from pool pc1 = th.add_prefix_from_pool(pool1, 4, 'foo') pc2 = th.add_prefix_from_pool(pool1, 6, 'foo') # check stats for pool1 res = Pool.list({ 'id': pool1.id }) # ipv4 self.assertEqual(1, res[0].member_prefixes_v4) self.assertEqual(1, res[0].used_prefixes_v4) self.assertEqual(256, res[0].total_addresses_v4) self.assertEqual(2, res[0].used_addresses_v4) self.assertEqual(254, res[0].free_addresses_v4) # ipv6 self.assertEqual(1, res[0].member_prefixes_v6) self.assertEqual(1, res[0].used_prefixes_v6) self.assertEqual(1208925819614629174706176, res[0].total_addresses_v6) self.assertEqual(65536, res[0].used_addresses_v6) self.assertEqual(1208925819614629174640640, res[0].free_addresses_v6) # remove child prefixes pc1.remove() pc2.remove() # check stats for pool1 res = Pool.list({ 'id': pool1.id }) # ipv4 self.assertEqual(1, res[0].member_prefixes_v4) self.assertEqual(0, res[0].used_prefixes_v4) self.assertEqual(256, res[0].total_addresses_v4) self.assertEqual(0, res[0].used_addresses_v4) self.assertEqual(256, res[0].free_addresses_v4) # ipv6 self.assertEqual(1, res[0].member_prefixes_v6) self.assertEqual(0, res[0].used_prefixes_v6) self.assertEqual(1208925819614629174706176, res[0].total_addresses_v6) self.assertEqual(0, res[0].used_addresses_v6) self.assertEqual(1208925819614629174706176, res[0].free_addresses_v6)
def list(self): """ Displays a list of pools. """ c.pools = Pool.list() return render('/pool_list.html')
def delete_pool(self, name): if len(name) > 0: pool = Pool.list({"name": name}) try: pool.remove() except NipapError as exc: print("Error: could not remove pool: %s" % str(exc))
def modify_pool(arg, opts): """ Modify a pool with the options set in opts """ s = get_schema() res = Pool.list(s, { 'name': arg }) if len(res) < 1: print >> sys.stderr, "No pool with name %s found." % arg sys.exit(1) p = res[0] if 'name' in opts: p.name = opts['name'] if 'description' in opts: p.description = opts['description'] if 'default-type' in opts: p.default_type = opts['default-type'] if 'ipv4_default_prefix_length' in opts: p.ipv4_default_prefix_length = opts['ipv4_default_prefix_length'] if 'ipv6_default_prefix_length' in opts: p.ipv6_default_prefix_length = opts['ipv6_default_prefix_length'] p.save() print "Pool %s saved." % p.name
def test_stats2(self): """ Check total stats are correct when updating member prefix """ th = TestHelper() # add a pool pool1 = th.add_pool('test', 'assignment', 31, 112) # add some members to the pool p1 = th.add_prefix('1.0.0.0/24', 'reservation', 'test', pool_id=pool1.id) p2 = th.add_prefix('2001:db8::/48', 'reservation', 'test', pool_id=pool1.id) p1.prefix = '1.0.0.0/25' p1.save() p2.prefix = '2001:db8::/64' p2.save() # check stats for pool1 res = Pool.list({ 'id': pool1.id }) # ipv4 self.assertEqual(1, res[0].member_prefixes_v4) self.assertEqual(0, res[0].used_prefixes_v4) self.assertEqual(128, res[0].total_addresses_v4) self.assertEqual(0, res[0].used_addresses_v4) self.assertEqual(128, res[0].free_addresses_v4) # ipv6 self.assertEqual(1, res[0].member_prefixes_v6) self.assertEqual(0, res[0].used_prefixes_v6) self.assertEqual(18446744073709551616, res[0].total_addresses_v6) self.assertEqual(0, res[0].used_addresses_v6) self.assertEqual(18446744073709551616, res[0].free_addresses_v6)
def get_pools(self): self.lock.acquire() try: self.pools = Pool.list() except Exception as e: self.lock.release() raise e self.lock.release()
def list_pool(self): """ List pools and return JSON encoded result. """ try: schema = Schema.get(int(request.params['schema'])) pools = Pool.list(schema) except NipapError, e: return json.dumps({'error': 1, 'message': e.args, 'type': type(e).__name__})
def add(self): """ Add a prefix. """ # make sure we have a schema try: c.schema = Schema.get(int(request.params['schema'])) c.pools = Pool.list(c.schema) except (KeyError, NipapNonExistentError), e: redirect(url(controller = 'schema', action = 'list'))
def list(self): """ Displays a list of pools. """ if 'schema' not in request.params: redirect(url(controller = 'schema', action = 'list')) c.schema = Schema.get(int(request.params['schema'])) c.pools = Pool.list(c.schema) return render('/pool_list.html')
def list_pool(self): """ List pools and return JSON encoded result. """ # fetch attributes from request.json attr = XhrController.extract_pool_attr(request.json) try: pools = Pool.list(attr) except NipapError, e: return json.dumps({'error': 1, 'message': e.args, 'type': type(e).__name__})
def add_prefix(arg, opts): """ Add prefix to NIPAP """ s = get_schema() p = Prefix() p.schema = s p.prefix = opts.get('prefix') p.type = opts.get('type') p.description = opts.get('description') p.node = opts.get('node') p.country = opts.get('country') p.order_id = opts.get('order_id') p.vrf = opts.get('vrf') p.alarm_priority = opts.get('alarm_priority') p.comment = opts.get('comment') p.monitor = _str_to_bool(opts.get('monitor')) args = {} if 'from-pool' in opts: res = Pool.list(s, { 'name': opts['from-pool'] }) if len(res) == 0: print >> sys.stderr, "No pool named %s found." % opts['from-pool'] sys.exit(1) args['from-pool'] = res[0] if 'from-prefix' in opts: args['from-prefix'] = [ opts['from-prefix'], ] if 'prefix-length' in opts: args['prefix_length'] = int(opts['prefix-length']) if 'family' in opts: family = opts['family'] if opts['family'] == 'ipv4': family = 4 elif opts['family'] == 'ipv6': family = 6 args['family'] = family try: p.save(args) except NipapError, e: print >> sys.stderr, "Could not add prefix to NIPAP: %s" % e.message sys.exit(1)
def list_pool(self): """ List pools and return JSON encoded result. """ # fetch attributes from request.json attr = XhrController.extract_pool_attr(request.json) try: pools = Pool.list(attr) except NipapError, e: return json.dumps({ 'error': 1, 'message': e.args, 'type': type(e).__name__ })
def remove_pool(arg, opts): """ Remove pool """ s = get_schema() res = Pool.list(s, { 'name': arg }) if len(res) < 1: print >> sys.stderr, "No pool with name %s found." % arg sys.exit(1) p = res[0] res = raw_input("Do you really want to remove the pool %s? [y/n]: " % p.name) if res == 'y': p.remove() print "Pool %s removed." % p.name else: print "Operation canceled."
def view_pool(arg, opts): """ View a single pool """ s = get_schema(opts.get('schema')) res = Pool.list(s, { 'name': arg }) if len(res) == 0: print "No pool named %s found." % arg return p = res[0] print "-- Pool " print " %-15s : %s" % ("Name", p.name) print " %-15s : %s" % ("Description", p.description) print " %-15s : %s" % ("Default type", p.default_type) print " %-15s : %s / %s" % ("Preflen (v4/v6)", str(p.ipv4_default_prefix_length), str(p.ipv6_default_prefix_length)) print "\n-- Prefixes in pool" res = Prefix.list(s, { 'pool': p.id}) for pref in res: print " %s" % pref.display_prefix
def test_stats4(self): """ Check total stats are correct when modifying child prefixes in pool """ th = TestHelper() # add a pool pool1 = th.add_pool('test', 'assignment', 31, 112) # add some members to the pool p1 = th.add_prefix('1.0.0.0/24', 'reservation', 'test', pool_id=pool1.id) p2 = th.add_prefix('2001:db8::/48', 'reservation', 'test', pool_id=pool1.id) # add child from pool pc1 = th.add_prefix_from_pool(pool1, 4, 'foo') pc2 = th.add_prefix_from_pool(pool1, 6, 'foo') # change child prefix and size and make sure stats are updated correctly pc1.prefix = '1.0.0.128/25' pc1.save() pc2.prefix = '2001:db8:0:1::/64' pc2.save() # check stats for pool1 res = Pool.list({ 'id': pool1.id }) # ipv4 self.assertEqual(1, res[0].member_prefixes_v4) self.assertEqual(1, res[0].used_prefixes_v4) self.assertEqual(256, res[0].total_addresses_v4) self.assertEqual(128, res[0].used_addresses_v4) self.assertEqual(128, res[0].free_addresses_v4) # ipv6 self.assertEqual(1, res[0].member_prefixes_v6) self.assertEqual(1, res[0].used_prefixes_v6) self.assertEqual(1208925819614629174706176, res[0].total_addresses_v6) self.assertEqual(18446744073709551616, res[0].used_addresses_v6) self.assertEqual(1208907372870555465154560, res[0].free_addresses_v6)
def get_pools(self, name=''): if len(name) > 0: pools = Pool.list({"name": name}) else: pools = Pool.list() return pools
sys.stdout.write(".") sys.stdout.flush() print " done!" if args.clear_pools: remove_confirmed = args.force if not remove_confirmed: res = raw_input("Are you sure you want to remove all pools? [y/N]") if len(res) > 0 and res.lower()[0] == 'y': remove_confirmed = True else: print "Operation aborted." if remove_confirmed: print "Removing: ", for p in Pool.list(): p.remove() sys.stdout.write(".") sys.stdout.flush() print " done!" if args.clear_prefixes: remove_confirmed = args.force if not remove_confirmed: res = raw_input("Are you sure you want to remove all prefixes? [y/N]") if len(res) > 0 and res.lower()[0] == 'y': remove_confirmed = True else: print "Aborted" if remove_confirmed:
def test_stats5(self): """ Check total stats are correct when adding and removing member prefix with childs from pool This is trickier as there is now a child in the pool that needs to be accounted for. """ th = TestHelper() # add a pool pool1 = th.add_pool('test', 'assignment', 31, 112) # add some members to the pool p1 = th.add_prefix('1.0.0.0/24', 'reservation', 'test', pool_id=pool1.id) p2 = th.add_prefix('2.0.0.0/24', 'reservation', 'test', pool_id=pool1.id) p3 = th.add_prefix('2001:db8:1::/48', 'reservation', 'test', pool_id=pool1.id) p4 = th.add_prefix('2001:db8:2::/48', 'reservation', 'test', pool_id=pool1.id) # add child from pool pc1 = th.add_prefix_from_pool(pool1, 4, 'foo') pc2 = th.add_prefix_from_pool(pool1, 6, 'foo') # remove first member prefixes from pool p1.pool = None p1.save() p3.pool = None p3.save() # check stats for pool1 res = Pool.list({ 'id': pool1.id }) # ipv4 self.assertEqual(1, res[0].member_prefixes_v4) self.assertEqual(0, res[0].used_prefixes_v4) self.assertEqual(256, res[0].total_addresses_v4) self.assertEqual(0, res[0].used_addresses_v4) self.assertEqual(256, res[0].free_addresses_v4) # ipv6 self.assertEqual(1, res[0].member_prefixes_v6) self.assertEqual(0, res[0].used_prefixes_v6) self.assertEqual(1208925819614629174706176, res[0].total_addresses_v6) self.assertEqual(0, res[0].used_addresses_v6) self.assertEqual(1208925819614629174706176, res[0].free_addresses_v6) # readd prefixes to pool p1.pool = pool1 p1.save() p3.pool = pool1 p3.save() # check stats for pool1 res = Pool.list({ 'id': pool1.id }) # ipv4 self.assertEqual(2, res[0].member_prefixes_v4) self.assertEqual(1, res[0].used_prefixes_v4) self.assertEqual(512, res[0].total_addresses_v4) self.assertEqual(2, res[0].used_addresses_v4) self.assertEqual(510, res[0].free_addresses_v4) # ipv6 self.assertEqual(2, res[0].member_prefixes_v6) self.assertEqual(1, res[0].used_prefixes_v6) self.assertEqual(2417851639229258349412352, res[0].total_addresses_v6) self.assertEqual(65536, res[0].used_addresses_v6) self.assertEqual(2417851639229258349346816, res[0].free_addresses_v6)
def test_stats1(self): """ Check total stats are correct when adding and removing member prefix """ th = TestHelper() # add a pool pool1 = th.add_pool('test', 'assignment', 31, 112) # check stats for pool1 res = Pool.list({ 'id': pool1.id }) # ipv4 self.assertEqual(0, res[0].member_prefixes_v4) self.assertEqual(0, res[0].used_prefixes_v4) self.assertEqual(0, res[0].total_addresses_v4) self.assertEqual(0, res[0].used_addresses_v4) self.assertEqual(0, res[0].free_addresses_v4) # ipv6 self.assertEqual(0, res[0].member_prefixes_v6) self.assertEqual(0, res[0].used_prefixes_v6) self.assertEqual(0, res[0].total_addresses_v6) self.assertEqual(0, res[0].used_addresses_v6) self.assertEqual(0, res[0].free_addresses_v6) # add some members to the pool p1 = th.add_prefix('1.0.0.0/24', 'assignment', 'test', pool_id=pool1.id) p2 = th.add_prefix('2.0.0.0/24', 'assignment', 'test', pool_id=pool1.id) p3 = th.add_prefix('2001:db8::/48', 'assignment', 'test', pool_id=pool1.id) p4 = th.add_prefix('2001:db8:1::/48', 'assignment', 'test', pool_id=pool1.id) # check stats for pool1 res = Pool.list({ 'id': pool1.id }) # ipv4 self.assertEqual(2, res[0].member_prefixes_v4) self.assertEqual(0, res[0].used_prefixes_v4) self.assertEqual(512, res[0].total_addresses_v4) self.assertEqual(0, res[0].used_addresses_v4) self.assertEqual(512, res[0].free_addresses_v4) # ipv6 self.assertEqual(2, res[0].member_prefixes_v6) self.assertEqual(0, res[0].used_prefixes_v6) self.assertEqual(2417851639229258349412352, res[0].total_addresses_v6) self.assertEqual(0, res[0].used_addresses_v6) self.assertEqual(2417851639229258349412352, res[0].free_addresses_v6) # remove one IPv4 and one IPv6 member from the pool p1.remove() p3.remove() # check stats for pool1 res = Pool.list({ 'id': pool1.id }) # ipv4 self.assertEqual(1, res[0].member_prefixes_v4) self.assertEqual(0, res[0].used_prefixes_v4) self.assertEqual(256, res[0].total_addresses_v4) self.assertEqual(0, res[0].used_addresses_v4) self.assertEqual(256, res[0].free_addresses_v4) # ipv6 self.assertEqual(1, res[0].member_prefixes_v6) self.assertEqual(0, res[0].used_prefixes_v6) self.assertEqual(1208925819614629174706176, res[0].total_addresses_v6) self.assertEqual(0, res[0].used_addresses_v6) self.assertEqual(1208925819614629174706176, res[0].free_addresses_v6)