예제 #1
0
    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)
예제 #2
0
    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')
예제 #3
0
    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'])
예제 #4
0
    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'])
예제 #5
0
    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'])
예제 #6
0
 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'])
예제 #7
0
 def test_loading_queue(self):
     manager = ip.IPManager()
     manager.load('test', '192.168.0.0/24')
     self.assertEqual(254, len(manager.queues['test']))
예제 #8
0
    def test_getitem(self):
        manager = ip.IPManager(queues={'test': '192.168.0.0/24'})

        self.assertEqual(manager.queues['test'], manager['test'])
예제 #9
0
    def test_deleting_used(self):
        manager = ip.IPManager(used_ips=set(['192.168.1.1']))

        del manager.used

        self.assertEqual(set(), manager.used)
예제 #10
0
    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))
예제 #11
0
    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))
예제 #12
0
    def test_get_ip_from_missing_queue(self):
        manager = ip.IPManager()

        with self.assertRaises(ip.NoSuchQueue):
            manager.get('management')
예제 #13
0
    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])
예제 #14
0
 def test_used_ips_copies(self):
     manager = ip.IPManager(used_ips=['192.168.0.1'])
     external = manager.used
     self.assertIsNot(manager._used_ips, external)
예제 #15
0
 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)
예제 #16
0
 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'])
예제 #17
0
    def test_save_not_implemented(self):
        manager = ip.IPManager()

        with self.assertRaises(NotImplementedError):
            manager.save()
예제 #18
0
    def test_load_creates_networks(self):
        manager = ip.IPManager()
        manager.load('test', '192.168.0.0/24')

        self.assertIn('test', manager._networks)
예제 #19
0
    def test_basic_instantiation(self):
        manager = ip.IPManager()

        self.assertEqual({}, manager.queues)
        self.assertEqual(set(), manager.used)
예제 #20
0
 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']))
예제 #21
0
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()