Merged trunk
This commit is contained in:
@@ -48,7 +48,6 @@ flags.DECLARE('auth_driver', 'nova.auth.manager')
|
|||||||
flags.DECLARE('network_size', 'nova.network.manager')
|
flags.DECLARE('network_size', 'nova.network.manager')
|
||||||
flags.DECLARE('num_networks', 'nova.network.manager')
|
flags.DECLARE('num_networks', 'nova.network.manager')
|
||||||
flags.DECLARE('update_dhcp_on_disassociate', 'nova.network.manager')
|
flags.DECLARE('update_dhcp_on_disassociate', 'nova.network.manager')
|
||||||
flags.DEFINE_string('dnsmasq_interface', 'br0', 'Default Dnsmasq interface')
|
|
||||||
|
|
||||||
LOG = logging.getLogger('nova.dhcpbridge')
|
LOG = logging.getLogger('nova.dhcpbridge')
|
||||||
|
|
||||||
@@ -87,10 +86,10 @@ def del_lease(mac, ip_address, _interface):
|
|||||||
"args": {"address": ip_address}})
|
"args": {"address": ip_address}})
|
||||||
|
|
||||||
|
|
||||||
def init_leases(interface):
|
def init_leases(network_id):
|
||||||
"""Get the list of hosts for an interface."""
|
"""Get the list of hosts for a network."""
|
||||||
ctxt = context.get_admin_context()
|
ctxt = context.get_admin_context()
|
||||||
network_ref = db.network_get_by_bridge(ctxt, interface)
|
network_ref = db.network_get(ctxt, network_id)
|
||||||
return linux_net.get_dhcp_leases(ctxt, network_ref)
|
return linux_net.get_dhcp_leases(ctxt, network_ref)
|
||||||
|
|
||||||
|
|
||||||
@@ -101,7 +100,8 @@ def main():
|
|||||||
argv = FLAGS(sys.argv)
|
argv = FLAGS(sys.argv)
|
||||||
logging.setup()
|
logging.setup()
|
||||||
# check ENV first so we don't break any older deploys
|
# check ENV first so we don't break any older deploys
|
||||||
interface = os.environ.get('DNSMASQ_INTERFACE', FLAGS.dnsmasq_interface)
|
network_id = int(os.environ.get('NETWORK_ID'))
|
||||||
|
|
||||||
if int(os.environ.get('TESTING', '0')):
|
if int(os.environ.get('TESTING', '0')):
|
||||||
from nova.tests import fake_flags
|
from nova.tests import fake_flags
|
||||||
|
|
||||||
@@ -120,7 +120,7 @@ def main():
|
|||||||
LOG.debug(msg)
|
LOG.debug(msg)
|
||||||
globals()[action + '_lease'](mac, ip, interface)
|
globals()[action + '_lease'](mac, ip, interface)
|
||||||
else:
|
else:
|
||||||
print init_leases(interface)
|
print init_leases(network_id)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -719,7 +719,7 @@ class NetworkCommands(object):
|
|||||||
# sanitize other input using FLAGS if necessary
|
# sanitize other input using FLAGS if necessary
|
||||||
if not num_networks:
|
if not num_networks:
|
||||||
num_networks = FLAGS.num_networks
|
num_networks = FLAGS.num_networks
|
||||||
if not network_size:
|
if not network_size and fixed_range_v4:
|
||||||
fixnet = netaddr.IPNetwork(fixed_range_v4)
|
fixnet = netaddr.IPNetwork(fixed_range_v4)
|
||||||
each_subnet_size = fixnet.size / int(num_networks)
|
each_subnet_size = fixnet.size / int(num_networks)
|
||||||
if each_subnet_size > FLAGS.network_size:
|
if each_subnet_size > FLAGS.network_size:
|
||||||
@@ -741,6 +741,9 @@ class NetworkCommands(object):
|
|||||||
if not dns1 and FLAGS.flat_network_dns:
|
if not dns1 and FLAGS.flat_network_dns:
|
||||||
dns1 = FLAGS.flat_network_dns
|
dns1 = FLAGS.flat_network_dns
|
||||||
|
|
||||||
|
if not network_size:
|
||||||
|
network_size = FLAGS.network_size
|
||||||
|
|
||||||
# create the network
|
# create the network
|
||||||
net_manager = utils.import_object(FLAGS.network_manager)
|
net_manager = utils.import_object(FLAGS.network_manager)
|
||||||
net_manager.create_networks(context.get_admin_context(),
|
net_manager.create_networks(context.get_admin_context(),
|
||||||
|
|||||||
@@ -1341,6 +1341,69 @@ class ComputeTestCase(test.TestCase):
|
|||||||
db.instance_destroy(c, instance_id2)
|
db.instance_destroy(c, instance_id2)
|
||||||
db.instance_destroy(c, instance_id3)
|
db.instance_destroy(c, instance_id3)
|
||||||
|
|
||||||
|
def test_get_all_by_metadata(self):
|
||||||
|
"""Test searching instances by metadata"""
|
||||||
|
|
||||||
|
c = context.get_admin_context()
|
||||||
|
instance_id0 = self._create_instance()
|
||||||
|
instance_id1 = self._create_instance({
|
||||||
|
'metadata': {'key1': 'value1'}})
|
||||||
|
instance_id2 = self._create_instance({
|
||||||
|
'metadata': {'key2': 'value2'}})
|
||||||
|
instance_id3 = self._create_instance({
|
||||||
|
'metadata': {'key3': 'value3'}})
|
||||||
|
instance_id4 = self._create_instance({
|
||||||
|
'metadata': {'key3': 'value3',
|
||||||
|
'key4': 'value4'}})
|
||||||
|
|
||||||
|
# get all instances
|
||||||
|
instances = self.compute_api.get_all(c,
|
||||||
|
search_opts={'metadata': {}})
|
||||||
|
self.assertEqual(len(instances), 5)
|
||||||
|
|
||||||
|
# wrong key/value combination
|
||||||
|
instances = self.compute_api.get_all(c,
|
||||||
|
search_opts={'metadata': {'key1': 'value3'}})
|
||||||
|
self.assertEqual(len(instances), 0)
|
||||||
|
|
||||||
|
# non-existing keys
|
||||||
|
instances = self.compute_api.get_all(c,
|
||||||
|
search_opts={'metadata': {'key5': 'value1'}})
|
||||||
|
self.assertEqual(len(instances), 0)
|
||||||
|
|
||||||
|
# find existing instance
|
||||||
|
instances = self.compute_api.get_all(c,
|
||||||
|
search_opts={'metadata': {'key2': 'value2'}})
|
||||||
|
self.assertEqual(len(instances), 1)
|
||||||
|
self.assertEqual(instances[0].id, instance_id2)
|
||||||
|
|
||||||
|
instances = self.compute_api.get_all(c,
|
||||||
|
search_opts={'metadata': {'key3': 'value3'}})
|
||||||
|
self.assertEqual(len(instances), 2)
|
||||||
|
instance_ids = [instance.id for instance in instances]
|
||||||
|
self.assertTrue(instance_id3 in instance_ids)
|
||||||
|
self.assertTrue(instance_id4 in instance_ids)
|
||||||
|
|
||||||
|
# multiple criterias as a dict
|
||||||
|
instances = self.compute_api.get_all(c,
|
||||||
|
search_opts={'metadata': {'key3': 'value3',
|
||||||
|
'key4': 'value4'}})
|
||||||
|
self.assertEqual(len(instances), 1)
|
||||||
|
self.assertEqual(instances[0].id, instance_id4)
|
||||||
|
|
||||||
|
# multiple criterias as a list
|
||||||
|
instances = self.compute_api.get_all(c,
|
||||||
|
search_opts={'metadata': [{'key4': 'value4'},
|
||||||
|
{'key3': 'value3'}]})
|
||||||
|
self.assertEqual(len(instances), 1)
|
||||||
|
self.assertEqual(instances[0].id, instance_id4)
|
||||||
|
|
||||||
|
db.instance_destroy(c, instance_id0)
|
||||||
|
db.instance_destroy(c, instance_id1)
|
||||||
|
db.instance_destroy(c, instance_id2)
|
||||||
|
db.instance_destroy(c, instance_id3)
|
||||||
|
db.instance_destroy(c, instance_id4)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _parse_db_block_device_mapping(bdm_ref):
|
def _parse_db_block_device_mapping(bdm_ref):
|
||||||
attr_list = ('delete_on_termination', 'device_name', 'no_device',
|
attr_list = ('delete_on_termination', 'device_name', 'no_device',
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ class CommonNetworkTestCase(test.TestCase):
|
|||||||
raise exception.NetworkNotFoundForCidr()
|
raise exception.NetworkNotFoundForCidr()
|
||||||
|
|
||||||
def network_create_safe(self, context, net):
|
def network_create_safe(self, context, net):
|
||||||
fakenet = {}
|
fakenet = dict(net)
|
||||||
fakenet['id'] = 999
|
fakenet['id'] = 999
|
||||||
return fakenet
|
return fakenet
|
||||||
|
|
||||||
@@ -269,6 +269,9 @@ class CommonNetworkTestCase(test.TestCase):
|
|||||||
def deallocate_fixed_ip(self, context, address):
|
def deallocate_fixed_ip(self, context, address):
|
||||||
self.deallocate_called = address
|
self.deallocate_called = address
|
||||||
|
|
||||||
|
def _create_fixed_ips(self, context, network_id):
|
||||||
|
pass
|
||||||
|
|
||||||
def fake_create_fixed_ips(self, context, network_id):
|
def fake_create_fixed_ips(self, context, network_id):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -286,16 +289,20 @@ class CommonNetworkTestCase(test.TestCase):
|
|||||||
|
|
||||||
def test_validate_cidrs(self):
|
def test_validate_cidrs(self):
|
||||||
manager = self.FakeNetworkManager()
|
manager = self.FakeNetworkManager()
|
||||||
nets = manager._validate_cidrs(None, '192.168.0.0/24', 1, 256)
|
nets = manager.create_networks(None, 'fake', '192.168.0.0/24',
|
||||||
|
False, 1, 256, None, None, None,
|
||||||
|
None)
|
||||||
self.assertEqual(1, len(nets))
|
self.assertEqual(1, len(nets))
|
||||||
cidrs = [str(net) for net in nets]
|
cidrs = [str(net['cidr']) for net in nets]
|
||||||
self.assertTrue('192.168.0.0/24' in cidrs)
|
self.assertTrue('192.168.0.0/24' in cidrs)
|
||||||
|
|
||||||
def test_validate_cidrs_split_exact_in_half(self):
|
def test_validate_cidrs_split_exact_in_half(self):
|
||||||
manager = self.FakeNetworkManager()
|
manager = self.FakeNetworkManager()
|
||||||
nets = manager._validate_cidrs(None, '192.168.0.0/24', 2, 128)
|
nets = manager.create_networks(None, 'fake', '192.168.0.0/24',
|
||||||
|
False, 2, 128, None, None, None,
|
||||||
|
None)
|
||||||
self.assertEqual(2, len(nets))
|
self.assertEqual(2, len(nets))
|
||||||
cidrs = [str(net) for net in nets]
|
cidrs = [str(net['cidr']) for net in nets]
|
||||||
self.assertTrue('192.168.0.0/25' in cidrs)
|
self.assertTrue('192.168.0.0/25' in cidrs)
|
||||||
self.assertTrue('192.168.0.128/25' in cidrs)
|
self.assertTrue('192.168.0.128/25' in cidrs)
|
||||||
|
|
||||||
@@ -306,9 +313,11 @@ class CommonNetworkTestCase(test.TestCase):
|
|||||||
manager.db.network_get_all(ctxt).AndReturn([{'id': 1,
|
manager.db.network_get_all(ctxt).AndReturn([{'id': 1,
|
||||||
'cidr': '192.168.2.0/24'}])
|
'cidr': '192.168.2.0/24'}])
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
nets = manager._validate_cidrs(None, '192.168.0.0/16', 4, 256)
|
nets = manager.create_networks(None, 'fake', '192.168.0.0/16',
|
||||||
|
False, 4, 256, None, None, None,
|
||||||
|
None)
|
||||||
self.assertEqual(4, len(nets))
|
self.assertEqual(4, len(nets))
|
||||||
cidrs = [str(net) for net in nets]
|
cidrs = [str(net['cidr']) for net in nets]
|
||||||
exp_cidrs = ['192.168.0.0/24', '192.168.1.0/24', '192.168.3.0/24',
|
exp_cidrs = ['192.168.0.0/24', '192.168.1.0/24', '192.168.3.0/24',
|
||||||
'192.168.4.0/24']
|
'192.168.4.0/24']
|
||||||
for exp_cidr in exp_cidrs:
|
for exp_cidr in exp_cidrs:
|
||||||
@@ -324,8 +333,9 @@ class CommonNetworkTestCase(test.TestCase):
|
|||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
# ValueError: requested cidr (192.168.2.0/24) conflicts with
|
# ValueError: requested cidr (192.168.2.0/24) conflicts with
|
||||||
# existing smaller cidr
|
# existing smaller cidr
|
||||||
args = [None, '192.168.2.0/24', 1, 256]
|
args = (None, 'fake', '192.168.2.0/24', False, 1, 256, None, None,
|
||||||
self.assertRaises(ValueError, manager._validate_cidrs, *args)
|
None, None)
|
||||||
|
self.assertRaises(ValueError, manager.create_networks, *args)
|
||||||
|
|
||||||
def test_validate_cidrs_split_smaller_cidr_in_use(self):
|
def test_validate_cidrs_split_smaller_cidr_in_use(self):
|
||||||
manager = self.FakeNetworkManager()
|
manager = self.FakeNetworkManager()
|
||||||
@@ -334,9 +344,10 @@ class CommonNetworkTestCase(test.TestCase):
|
|||||||
manager.db.network_get_all(ctxt).AndReturn([{'id': 1,
|
manager.db.network_get_all(ctxt).AndReturn([{'id': 1,
|
||||||
'cidr': '192.168.2.0/25'}])
|
'cidr': '192.168.2.0/25'}])
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
nets = manager._validate_cidrs(None, '192.168.0.0/16', 4, 256)
|
nets = manager.create_networks(None, 'fake', '192.168.0.0/16',
|
||||||
|
False, 4, 256, None, None, None, None)
|
||||||
self.assertEqual(4, len(nets))
|
self.assertEqual(4, len(nets))
|
||||||
cidrs = [str(net) for net in nets]
|
cidrs = [str(net['cidr']) for net in nets]
|
||||||
exp_cidrs = ['192.168.0.0/24', '192.168.1.0/24', '192.168.3.0/24',
|
exp_cidrs = ['192.168.0.0/24', '192.168.1.0/24', '192.168.3.0/24',
|
||||||
'192.168.4.0/24']
|
'192.168.4.0/24']
|
||||||
for exp_cidr in exp_cidrs:
|
for exp_cidr in exp_cidrs:
|
||||||
@@ -350,9 +361,10 @@ class CommonNetworkTestCase(test.TestCase):
|
|||||||
manager.db.network_get_all(ctxt).AndReturn([{'id': 1,
|
manager.db.network_get_all(ctxt).AndReturn([{'id': 1,
|
||||||
'cidr': '192.168.2.9/29'}])
|
'cidr': '192.168.2.9/29'}])
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
nets = manager._validate_cidrs(None, '192.168.2.0/24', 3, 32)
|
nets = manager.create_networks(None, 'fake', '192.168.2.0/24',
|
||||||
|
False, 3, 32, None, None, None, None)
|
||||||
self.assertEqual(3, len(nets))
|
self.assertEqual(3, len(nets))
|
||||||
cidrs = [str(net) for net in nets]
|
cidrs = [str(net['cidr']) for net in nets]
|
||||||
exp_cidrs = ['192.168.2.32/27', '192.168.2.64/27', '192.168.2.96/27']
|
exp_cidrs = ['192.168.2.32/27', '192.168.2.64/27', '192.168.2.96/27']
|
||||||
for exp_cidr in exp_cidrs:
|
for exp_cidr in exp_cidrs:
|
||||||
self.assertTrue(exp_cidr in cidrs)
|
self.assertTrue(exp_cidr in cidrs)
|
||||||
@@ -367,17 +379,19 @@ class CommonNetworkTestCase(test.TestCase):
|
|||||||
{'id': 3, 'cidr': '192.168.2.128/26'}]
|
{'id': 3, 'cidr': '192.168.2.128/26'}]
|
||||||
manager.db.network_get_all(ctxt).AndReturn(in_use)
|
manager.db.network_get_all(ctxt).AndReturn(in_use)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
args = [None, '192.168.2.0/24', 3, 64]
|
args = (None, 'fake', '192.168.2.0/24', False, 3, 64, None, None,
|
||||||
|
None, None)
|
||||||
# ValueError: Not enough subnets avail to satisfy requested num_
|
# ValueError: Not enough subnets avail to satisfy requested num_
|
||||||
# networks - some subnets in requested range already
|
# networks - some subnets in requested range already
|
||||||
# in use
|
# in use
|
||||||
self.assertRaises(ValueError, manager._validate_cidrs, *args)
|
self.assertRaises(ValueError, manager.create_networks, *args)
|
||||||
|
|
||||||
def test_validate_cidrs_one_in_use(self):
|
def test_validate_cidrs_one_in_use(self):
|
||||||
manager = self.FakeNetworkManager()
|
manager = self.FakeNetworkManager()
|
||||||
args = [None, '192.168.0.0/24', 2, 256]
|
args = (None, 'fake', '192.168.0.0/24', False, 2, 256, None, None,
|
||||||
|
None, None)
|
||||||
# ValueError: network_size * num_networks exceeds cidr size
|
# ValueError: network_size * num_networks exceeds cidr size
|
||||||
self.assertRaises(ValueError, manager._validate_cidrs, *args)
|
self.assertRaises(ValueError, manager.create_networks, *args)
|
||||||
|
|
||||||
def test_validate_cidrs_already_used(self):
|
def test_validate_cidrs_already_used(self):
|
||||||
manager = self.FakeNetworkManager()
|
manager = self.FakeNetworkManager()
|
||||||
@@ -387,20 +401,23 @@ class CommonNetworkTestCase(test.TestCase):
|
|||||||
'cidr': '192.168.0.0/24'}])
|
'cidr': '192.168.0.0/24'}])
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
# ValueError: cidr already in use
|
# ValueError: cidr already in use
|
||||||
args = [None, '192.168.0.0/24', 1, 256]
|
args = (None, 'fake', '192.168.0.0/24', False, 1, 256, None, None,
|
||||||
self.assertRaises(ValueError, manager._validate_cidrs, *args)
|
None, None)
|
||||||
|
self.assertRaises(ValueError, manager.create_networks, *args)
|
||||||
|
|
||||||
def test_validate_cidrs_too_many(self):
|
def test_validate_cidrs_too_many(self):
|
||||||
manager = self.FakeNetworkManager()
|
manager = self.FakeNetworkManager()
|
||||||
args = [None, '192.168.0.0/24', 200, 256]
|
args = (None, 'fake', '192.168.0.0/24', False, 200, 256, None, None,
|
||||||
|
None, None)
|
||||||
# ValueError: Not enough subnets avail to satisfy requested
|
# ValueError: Not enough subnets avail to satisfy requested
|
||||||
# num_networks
|
# num_networks
|
||||||
self.assertRaises(ValueError, manager._validate_cidrs, *args)
|
self.assertRaises(ValueError, manager.create_networks, *args)
|
||||||
|
|
||||||
def test_validate_cidrs_split_partial(self):
|
def test_validate_cidrs_split_partial(self):
|
||||||
manager = self.FakeNetworkManager()
|
manager = self.FakeNetworkManager()
|
||||||
nets = manager._validate_cidrs(None, '192.168.0.0/16', 2, 256)
|
nets = manager.create_networks(None, 'fake', '192.168.0.0/16',
|
||||||
returned_cidrs = [str(net) for net in nets]
|
False, 2, 256, None, None, None, None)
|
||||||
|
returned_cidrs = [str(net['cidr']) for net in nets]
|
||||||
self.assertTrue('192.168.0.0/24' in returned_cidrs)
|
self.assertTrue('192.168.0.0/24' in returned_cidrs)
|
||||||
self.assertTrue('192.168.1.0/24' in returned_cidrs)
|
self.assertTrue('192.168.1.0/24' in returned_cidrs)
|
||||||
|
|
||||||
@@ -411,10 +428,11 @@ class CommonNetworkTestCase(test.TestCase):
|
|||||||
fakecidr = [{'id': 1, 'cidr': '192.168.0.0/8'}]
|
fakecidr = [{'id': 1, 'cidr': '192.168.0.0/8'}]
|
||||||
manager.db.network_get_all(ctxt).AndReturn(fakecidr)
|
manager.db.network_get_all(ctxt).AndReturn(fakecidr)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
args = [None, '192.168.0.0/24', 1, 256]
|
args = (None, 'fake', '192.168.0.0/24', False, 1, 256, None, None,
|
||||||
|
None, None)
|
||||||
# ValueError: requested cidr (192.168.0.0/24) conflicts
|
# ValueError: requested cidr (192.168.0.0/24) conflicts
|
||||||
# with existing supernet
|
# with existing supernet
|
||||||
self.assertRaises(ValueError, manager._validate_cidrs, *args)
|
self.assertRaises(ValueError, manager.create_networks, *args)
|
||||||
|
|
||||||
def test_create_networks(self):
|
def test_create_networks(self):
|
||||||
cidr = '192.168.0.0/24'
|
cidr = '192.168.0.0/24'
|
||||||
@@ -424,7 +442,7 @@ class CommonNetworkTestCase(test.TestCase):
|
|||||||
args = [None, 'foo', cidr, None, 1, 256, 'fd00::/48', None, None,
|
args = [None, 'foo', cidr, None, 1, 256, 'fd00::/48', None, None,
|
||||||
None]
|
None]
|
||||||
result = manager.create_networks(*args)
|
result = manager.create_networks(*args)
|
||||||
self.assertEqual(manager.create_networks(*args), None)
|
self.assertTrue(manager.create_networks(*args))
|
||||||
|
|
||||||
def test_create_networks_cidr_already_used(self):
|
def test_create_networks_cidr_already_used(self):
|
||||||
manager = self.FakeNetworkManager()
|
manager = self.FakeNetworkManager()
|
||||||
@@ -444,4 +462,4 @@ class CommonNetworkTestCase(test.TestCase):
|
|||||||
self.fake_create_fixed_ips)
|
self.fake_create_fixed_ips)
|
||||||
args = [None, 'foo', cidr, None, 10, 256, 'fd00::/48', None, None,
|
args = [None, 'foo', cidr, None, 10, 256, 'fd00::/48', None, None,
|
||||||
None]
|
None]
|
||||||
self.assertEqual(manager.create_networks(*args), None)
|
self.assertTrue(manager.create_networks(*args))
|
||||||
|
|||||||
@@ -28,10 +28,10 @@ from nova import utils
|
|||||||
|
|
||||||
def stubout_instance_snapshot(stubs):
|
def stubout_instance_snapshot(stubs):
|
||||||
@classmethod
|
@classmethod
|
||||||
def fake_fetch_image(cls, context, session, instance_id, image, user,
|
def fake_fetch_image(cls, context, session, instance, image, user,
|
||||||
project, type):
|
project, type):
|
||||||
from nova.virt.xenapi.fake import create_vdi
|
from nova.virt.xenapi.fake import create_vdi
|
||||||
name_label = "instance-%s" % instance_id
|
name_label = "instance-%s" % instance.id
|
||||||
#TODO: create fake SR record
|
#TODO: create fake SR record
|
||||||
sr_ref = "fakesr"
|
sr_ref = "fakesr"
|
||||||
vdi_ref = create_vdi(name_label=name_label, read_only=False,
|
vdi_ref = create_vdi(name_label=name_label, read_only=False,
|
||||||
|
|||||||
Reference in New Issue
Block a user