def test_loading_used_ips(self): manager = ip.IPManager() manager.load('test', '192.168.0.0/24') self.assertEqual(2, len(manager.used)) self.assertIn('192.168.0.0', manager.used) self.assertIn('192.168.0.255', manager.used)
def test_getting_ip_from_empty_queue(self): manager = ip.IPManager(queues={'test': '192.168.0.0/31'}) # There will only be 1 usable IP address in this range. manager.get('test') with self.assertRaises(ip.EmptyQueue): manager.get('test')
def test_getting_ip(self): manager = ip.IPManager(queues={'test': '192.168.0.0/24'}) my_ip = manager.get('test') self.assertTrue(my_ip.startswith('192.168.0')) self.assertIn(my_ip, manager.used) self.assertNotIn(my_ip, manager.queues['test'])
def test_deleting_used_ips_releases_to_queues(self): target_ip = '192.168.0.1' manager = ip.IPManager(queues={'test': '192.168.0.0/31'}, used_ips=[target_ip]) del manager.used self.assertIn(target_ip, manager['test'])
def test_release_used_ip(self): target_ip = '192.168.0.1' manager = ip.IPManager(queues={'test': '192.168.0.0/31'}, used_ips=[target_ip]) manager.release(target_ip) # No broadcast address on this network, so only the network addr left self.assertEqual(1, len(manager.used)) self.assertNotIn(target_ip, manager.used) self.assertIn(target_ip, manager['test'])
def test_loading_network_excludes(self): manager = ip.IPManager() manager.load('test', '192.168.0.0/24') self.assertNotIn('192.168.0.0', manager.queues['test']) self.assertNotIn('192.168.0.255', manager.queues['test'])
def test_loading_queue(self): manager = ip.IPManager() manager.load('test', '192.168.0.0/24') self.assertEqual(254, len(manager.queues['test']))
def test_getitem(self): manager = ip.IPManager(queues={'test': '192.168.0.0/24'}) self.assertEqual(manager.queues['test'], manager['test'])
def test_deleting_used(self): manager = ip.IPManager(used_ips=set(['192.168.1.1'])) del manager.used self.assertEqual(set(), manager.used)
def test_verbose_instantiation_duplicated_ips(self): manager = ip.IPManager(used_ips=['192.168.0.0', '192.168.0.0']) self.assertEqual(1, len(manager.used))
def test_instantiation_with_used_list(self): manager = ip.IPManager(used_ips=['192.168.0.0', '192.168.0.255']) self.assertEqual(2, len(manager.used))
def test_get_ip_from_missing_queue(self): manager = ip.IPManager() with self.assertRaises(ip.NoSuchQueue): manager.get('management')
def test_loaded_randomly(self): manager = ip.IPManager() manager.load('test', '192.168.0.0/24') self.assertNotEqual(['192.168.0.1', '192.168.0.2', '192.168.0.3'], manager.queues['test'][0:3])
def test_used_ips_copies(self): manager = ip.IPManager(used_ips=['192.168.0.1']) external = manager.used self.assertIsNot(manager._used_ips, external)
def test_queue_list_copied(self): manager = ip.IPManager(queues={'test': '192.168.0.0/31'}) external = manager['test'] # test against the internal structure since .queues should # itself be making copies self.assertIsNot(manager._queues['test'], external)
def test_queue_dict_copied(self): manager = ip.IPManager(queues={'test': '192.168.0.0/31'}) external = manager.queues self.assertIsNot(manager.queues, external) self.assertIsNot(manager.queues['test'], external['test'])
def test_save_not_implemented(self): manager = ip.IPManager() with self.assertRaises(NotImplementedError): manager.save()
def test_load_creates_networks(self): manager = ip.IPManager() manager.load('test', '192.168.0.0/24') self.assertIn('test', manager._networks)
def test_basic_instantiation(self): manager = ip.IPManager() self.assertEqual({}, manager.queues) self.assertEqual(set(), manager.used)
def test_verbose_instantiation(self): manager = ip.IPManager(queues={'test': '192.168.0.0/24'}, used_ips=set(['192.168.0.0', '192.168.0.255'])) self.assertEqual(2, len(manager.used)) self.assertEqual(254, len(manager.queues['test']))
def main(): "main function" config_file = "sim_user_config.yml" user_defined_config = load_user_configuration(config_file) # get hosts that will be used by simulator sim_hosts = get_sim_hosts(user_defined_config) vms_per_host = int(user_defined_config.get('vms_per_host')) # get cidr_networks cidr_networks = user_defined_config.get('cidr_networks') if not cidr_networks: raise SystemExit('No nodes CIDR specified in user config') try: pxe_cidr = cidr_networks['pxe']['subnet'] pxe_gateway = cidr_networks['pxe']['gateway'] mgmt_cidr = cidr_networks['mgmt']['subnet'] tunnel_cidr = cidr_networks['tunnel']['subnet'] storage_cidr = cidr_networks['storage']['subnet'] flat_cidr = cidr_networks['flat']['subnet'] except Exception as e: raise SystemExit( 'one of pxe, mgmt, tunnel, flat or storage network is not' 'specified in user config.') var_file = "vars.rc" var_file_ansible = "playbooks/vars/main.yml" configure_simulator(var_file, var_file_ansible, user_defined_config) # Load all of the IP addresses that we know are used set_used_ips(user_defined_config) # exclude broadcast and network ips for each cidr base_exclude = [] for cidr in [pxe_cidr, mgmt_cidr, tunnel_cidr, storage_cidr, flat_cidr]: base_exclude.append(str(netaddr.IPNetwork(cidr).network)) base_exclude.append(str(netaddr.IPNetwork(cidr).broadcast)) USED_IPS.update(base_exclude) # set the queues manager = ip.IPManager(queues={ 'pxe': pxe_cidr, 'mgmt': mgmt_cidr, 'tunnel': tunnel_cidr, 'storage': storage_cidr, 'flat': flat_cidr }, used_ips=USED_IPS) # generate inventory inv = generate_inv(sim_hosts, manager, vms_per_host) # save inventory with open('sim_inv.json', 'w') as outfile: json.dump(inv, outfile) # generate osa inventory with open('compute_vms.yml', 'w') as f: f.write('---\n') f.write('compute_vms:\n') for (k, v) in inv.items(): for (kk, vv) in v.items(): for (kkk, vvv) in vv.items(): f.write(' ' + kkk + ':\n') f.write(' ip: ' + vvv['ansible_mgmt_host'] + '\n') f.close() # generate static inventory with open('compute_vms_static_inv.yml', 'w') as f: f.write('[compute_vms]\n') for (k, v) in inv.items(): for (kk, vv) in v.items(): for (kkk, vvv) in vv.items(): f.write(kkk + ' ansible_ssh_host=' + vvv['ansible_pxe_host'] + '\n') f.close()