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 quota
from nova import utils from nova import utils
from nova.auth import manager from nova.auth import manager
from nova.network import manager as network_manager
from nova.cloudpipe import pipelib from nova.cloudpipe import pipelib
@@ -321,6 +322,25 @@ class FloatingIpCommands(object):
floating_ip['address'], floating_ip['address'],
instance) 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 = [ CATEGORIES = [
('user', UserCommands), ('user', UserCommands),
@@ -328,7 +348,8 @@ CATEGORIES = [
('role', RoleCommands), ('role', RoleCommands),
('shell', ShellCommands), ('shell', ShellCommands),
('vpn', VpnCommands), ('vpn', VpnCommands),
('floating', FloatingIpCommands) ('floating', FloatingIpCommands),
('network', NetworkCommands)
] ]
@@ -394,9 +415,9 @@ def main():
fn(*argv) fn(*argv)
sys.exit(0) sys.exit(0)
except TypeError: except TypeError:
print "Wrong number of arguments supplied" print "Possible wrong number of arguments supplied"
print "%s %s: %s" % (category, action, fn.__doc__) print "%s %s: %s" % (category, action, fn.__doc__)
sys.exit(2) raise
if __name__ == '__main__': if __name__ == '__main__':
main() main()

View File

@@ -484,12 +484,6 @@ class AuthManager(object):
member_users) member_users)
if project_dict: if project_dict:
project = Project(**project_dict) project = Project(**project_dict)
try:
self.network_manager.allocate_network(context,
project.id)
except:
drv.delete_project(project.id)
raise
return project return project
def modify_project(self, project, manager_user=None, description=None): def modify_project(self, project, manager_user=None, description=None):
@@ -558,13 +552,6 @@ class AuthManager(object):
def delete_project(self, project, context=None): def delete_project(self, project, context=None):
"""Deletes a project""" """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: with self.driver() as drv:
drv.delete_project(Project.safe_id(project)) drv.delete_project(Project.safe_id(project))

View File

@@ -31,8 +31,10 @@ from tornado import ioloop
from twisted.internet import defer from twisted.internet import defer
from twisted.trial import unittest from twisted.trial import unittest
from nova import db
from nova import fakerabbit from nova import fakerabbit
from nova import flags from nova import flags
from nova.network import manager as network_manager
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
@@ -56,6 +58,13 @@ class TrialTestCase(unittest.TestCase):
def setUp(self): # pylint: disable-msg=C0103 def setUp(self): # pylint: disable-msg=C0103
"""Run before each test method to initialize test environment""" """Run before each test method to initialize test environment"""
super(TrialTestCase, self).setUp() 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 # emulate some of the mox stuff, we can't use the metaclass
# because it screws with our generators # because it screws with our generators
@@ -71,6 +80,7 @@ class TrialTestCase(unittest.TestCase):
self.stubs.UnsetAll() self.stubs.UnsetAll()
self.stubs.SmartUnsetAll() self.stubs.SmartUnsetAll()
self.mox.VerifyAll() self.mox.VerifyAll()
db.network_disassociate_all(None)
if FLAGS.fake_rabbit: if FLAGS.fake_rabbit:
fakerabbit.reset_all() fakerabbit.reset_all()

View File

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