get rid of network indexes and make networks into a pool

This commit is contained in:
Vishvananda Ishaya
2010-09-28 10:34:32 -07:00
parent 19ef5c732d
commit 81406d1a31
4 changed files with 45 additions and 20 deletions

View File

@@ -72,6 +72,7 @@ from nova import flags
from nova import quota
from nova import utils
from nova.auth import manager
from nova.network import manager as network_manager
from nova.cloudpipe import pipelib
@@ -321,6 +322,25 @@ class FloatingIpCommands(object):
floating_ip['address'],
instance)
class NetworkCommands(object):
"""Class for managing networks."""
def create(self, num_networks=None, network_size=None,
vlan_start=None, vpn_start=None):
"""Creates floating ips for host by range
arguments: [num_networks=FLAG], [network_size=FLAG],
[vlan_start=FLAG, vpn_start=FLAG]"""
if not num_networks:
num_networks = FLAGS.num_networks
if not network_size:
network_size = FLAGS.network_size
if not vlan_start:
vlan_start = FLAGS.vlan_start
if not vpn_start:
vpn_start = FLAGS.vpn_start
net_manager = network_manager.VlanManager()
net_manager.create_networks(None, int(num_networks), int(network_size),
int(vlan_start), int(vpn_start))
CATEGORIES = [
('user', UserCommands),
@@ -328,7 +348,8 @@ CATEGORIES = [
('role', RoleCommands),
('shell', ShellCommands),
('vpn', VpnCommands),
('floating', FloatingIpCommands)
('floating', FloatingIpCommands),
('network', NetworkCommands)
]
@@ -394,9 +415,9 @@ def main():
fn(*argv)
sys.exit(0)
except TypeError:
print "Wrong number of arguments supplied"
print "Possible wrong number of arguments supplied"
print "%s %s: %s" % (category, action, fn.__doc__)
sys.exit(2)
raise
if __name__ == '__main__':
main()

View File

@@ -484,12 +484,6 @@ class AuthManager(object):
member_users)
if project_dict:
project = Project(**project_dict)
try:
self.network_manager.allocate_network(context,
project.id)
except:
drv.delete_project(project.id)
raise
return project
def modify_project(self, project, manager_user=None, description=None):
@@ -558,13 +552,6 @@ class AuthManager(object):
def delete_project(self, project, context=None):
"""Deletes a project"""
try:
network_ref = db.project_get_network(context,
Project.safe_id(project))
db.network_destroy(context, network_ref['id'])
except:
logging.exception('Could not destroy network for %s',
project)
with self.driver() as drv:
drv.delete_project(Project.safe_id(project))

View File

@@ -31,8 +31,10 @@ from tornado import ioloop
from twisted.internet import defer
from twisted.trial import unittest
from nova import db
from nova import fakerabbit
from nova import flags
from nova.network import manager as network_manager
FLAGS = flags.FLAGS
@@ -56,6 +58,13 @@ class TrialTestCase(unittest.TestCase):
def setUp(self): # pylint: disable-msg=C0103
"""Run before each test method to initialize test environment"""
super(TrialTestCase, self).setUp()
# NOTE(vish): We need a better method for creating fixtures for tests
# now that we have some required db setup for the system
# to work properly.
if db.network_count(None) != 5:
network_manager.VlanManager().create_networks(None, 5, 16,
FLAGS.vlan_start,
FLAGS.vpn_start)
# emulate some of the mox stuff, we can't use the metaclass
# because it screws with our generators
@@ -71,6 +80,7 @@ class TrialTestCase(unittest.TestCase):
self.stubs.UnsetAll()
self.stubs.SmartUnsetAll()
self.mox.VerifyAll()
db.network_disassociate_all(None)
if FLAGS.fake_rabbit:
fakerabbit.reset_all()

View File

@@ -94,6 +94,7 @@ class NetworkTestCase(test.TrialTestCase):
float_addr = self.network.allocate_floating_ip(self.context,
self.projects[0].id)
fix_addr = self._create_address(0)
lease_ip(fix_addr)
self.assertEqual(float_addr, str(pubnet[0]))
self.network.associate_floating_ip(self.context, float_addr, fix_addr)
address = db.instance_get_floating_address(None, self.instance_id)
@@ -103,6 +104,7 @@ class NetworkTestCase(test.TrialTestCase):
self.assertEqual(address, None)
self.network.deallocate_floating_ip(self.context, float_addr)
self.network.deallocate_fixed_ip(self.context, fix_addr)
release_ip(fix_addr)
def test_allocate_deallocate_fixed_ip(self):
"""Makes sure that we can allocate and deallocate a fixed ip"""
@@ -180,8 +182,8 @@ class NetworkTestCase(test.TrialTestCase):
release_ip(address3)
for instance_id in instance_ids:
db.instance_destroy(None, instance_id)
release_ip(first)
self.network.deallocate_fixed_ip(self.context, first)
release_ip(first)
def test_vpn_ip_and_port_looks_valid(self):
"""Ensure the vpn ip and port are reasonable"""
@@ -197,10 +199,13 @@ class NetworkTestCase(test.TrialTestCase):
for i in range(networks_left):
project = self.manager.create_project('many%s' % i, self.user)
projects.append(project)
db.project_get_network(None, project.id)
project = self.manager.create_project('last', self.user)
projects.append(project)
self.assertRaises(db.NoMoreNetworks,
self.manager.create_project,
'boom',
self.user)
db.project_get_network,
None,
project.id)
for project in projects:
self.manager.delete_project(project)
@@ -213,7 +218,9 @@ class NetworkTestCase(test.TrialTestCase):
address2 = self._create_address(0)
self.assertEqual(address, address2)
lease_ip(address)
self.network.deallocate_fixed_ip(self.context, address2)
release_ip(address)
def test_available_ips(self):
"""Make sure the number of available ips for the network is correct