diff options
author | Vishvananda Ishaya <vishvananda@gmail.com> | 2014-05-23 11:12:31 -0700 |
---|---|---|
committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2014-08-19 11:21:23 -0700 |
commit | 231347ebbb1c61976e7bd2bd3734d611d21e0ec0 (patch) | |
tree | 9489386299978b47ed1abe28deba1f30adc4059f /nova/tests/network/test_manager.py | |
parent | c3fdcc2bd61b84dbab9a8d3a9e7737315c6f7fb5 (diff) | |
download | nova-231347ebbb1c61976e7bd2bd3734d611d21e0ec0.tar.gz |
Support reserving ips at network create time
It is horribly inefficient to create a network and reserve a large
swath of ips, so allow the network creator to specify which ips
he wants to be available in the network by specifying allowed_start
and allowed_end.
Something like:
network-create foo --cidr 10.0.0.0/24 --allowed-start 10.0.0.5 \
--allowed-end 10.0.0.250
would ensure that 10.0.0.0-10.0.0.4 and 10.0.0.254-10.0.0.255 are
marked reserved so instances would be assigned addresses from the
middle of the range.
Partially-implements blueprint better-support-for-multiple-networks
Change-Id: I5427e1a2d202658d374292559fc7054f2fa51124
Diffstat (limited to 'nova/tests/network/test_manager.py')
-rw-r--r-- | nova/tests/network/test_manager.py | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/nova/tests/network/test_manager.py b/nova/tests/network/test_manager.py index 694f3d6e11..61f8d67afc 100644 --- a/nova/tests/network/test_manager.py +++ b/nova/tests/network/test_manager.py @@ -333,9 +333,45 @@ class FlatNetworkTestCase(test.TestCase): 256, None, None, None, None, None) self.assertEqual(1, len(nets)) network = nets[0] - self.assertEqual(3, db.network_count_reserved_ips(context_admin, + self.assertEqual(4, db.network_count_reserved_ips(context_admin, network['id'])) + def test_validate_reserved_start_end(self): + context_admin = context.RequestContext('testuser', 'testproject', + is_admin=True) + nets = self.network.create_networks(context_admin, 'fake', + '192.168.0.0/24', False, 1, + 256, dhcp_server='192.168.0.11', + allowed_start='192.168.0.10', + allowed_end='192.168.0.245') + self.assertEqual(1, len(nets)) + network = nets[0] + # gateway defaults to beginning of allowed_start + self.assertEqual('192.168.0.10', network['gateway']) + # vpn_server doesn't conflict with dhcp_start + self.assertEqual('192.168.0.12', network['vpn_private_address']) + # dhcp_start doesn't conflict with dhcp_server + self.assertEqual('192.168.0.13', network['dhcp_start']) + # NOTE(vish): 10 from the beginning, 10 from the end, and + # 1 for the gateway, 1 for the dhcp server, + # 1 for the vpn server + self.assertEqual(23, db.network_count_reserved_ips(context_admin, + network['id'])) + + def test_validate_reserved_start_out_of_range(self): + context_admin = context.RequestContext('testuser', 'testproject', + is_admin=True) + self.assertRaises(ValueError, self.network.create_networks, + context_admin, 'fake', '192.168.0.0/24', False, + 1, 256, allowed_start='192.168.1.10') + + def test_validate_reserved_end_invalid(self): + context_admin = context.RequestContext('testuser', 'testproject', + is_admin=True) + self.assertRaises(ValueError, self.network.create_networks, + context_admin, 'fake', '192.168.0.0/24', False, + 1, 256, allowed_end='invalid') + def test_validate_networks_none_requested_networks(self): self.network.validate_networks(self.context, None) @@ -1782,7 +1818,8 @@ class CommonNetworkTestCase(test.TestCase): self.assertTrue(res) def fake_create_fixed_ips(self, context, network_id, fixed_cidr=None, - extra_reserved=None): + extra_reserved=None, bottom_reserved=0, + top_reserved=0): return None def test_get_instance_nw_info_client_exceptions(self): |