From 5cc8d5839cdb20d588c808c2eac52889365e4454 Mon Sep 17 00:00:00 2001 From: Jesse Andrews Date: Sat, 14 Aug 2010 21:24:26 -0700 Subject: more work on trying to get compute tests passing --- nova/auth/manager.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'nova/auth') diff --git a/nova/auth/manager.py b/nova/auth/manager.py index 064fd78bc..f7f454898 100644 --- a/nova/auth/manager.py +++ b/nova/auth/manager.py @@ -31,6 +31,7 @@ import zipfile from nova import crypto from nova import exception from nova import flags +from nova import models from nova import utils from nova.auth import signer from nova.network import vpn @@ -201,6 +202,11 @@ class Project(AuthBase): ip, port = AuthManager().get_project_vpn_data(self) return port + @property + def network(self): + session = models.create_session() + return session.query(models.Network).filter_by(project_id=self.id).first() + def has_manager(self, user): return AuthManager().is_project_manager(user, self) @@ -521,7 +527,9 @@ class AuthManager(object): description, member_users) if project_dict: - return Project(**project_dict) + project = Project(**project_dict) + # FIXME(ja): create network? + return project def add_to_project(self, user, project): """Add user to project""" -- cgit From 3ee748bb6f55ad341606919901c4c17a82d069fd Mon Sep 17 00:00:00 2001 From: Jesse Andrews Date: Sat, 14 Aug 2010 22:55:04 -0700 Subject: ComputeConnectionTestCase is almost working again --- nova/auth/manager.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'nova/auth') diff --git a/nova/auth/manager.py b/nova/auth/manager.py index f7f454898..4a813c861 100644 --- a/nova/auth/manager.py +++ b/nova/auth/manager.py @@ -528,7 +528,11 @@ class AuthManager(object): member_users) if project_dict: project = Project(**project_dict) - # FIXME(ja): create network? + # FIXME(ja): EVIL HACK - this should poll from a pool + session = models.create_session() + net = models.Network(project_id=project.id, kind='vlan') + session.add(net) + session.commit() return project def add_to_project(self, user, project): -- cgit From 49f391642639fd0f5bdcc5e791b839eb3a702850 Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Tue, 17 Aug 2010 18:08:39 -0700 Subject: fix vpn access for auth --- nova/auth/manager.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'nova/auth') diff --git a/nova/auth/manager.py b/nova/auth/manager.py index c16eb0c3c..d2d4d641b 100644 --- a/nova/auth/manager.py +++ b/nova/auth/manager.py @@ -34,7 +34,6 @@ from nova import flags from nova import models from nova import utils from nova.auth import signer -from nova.network import vpn FLAGS = flags.FLAGS @@ -571,10 +570,12 @@ class AuthManager(object): @return: A tuple containing (ip, port) or None, None if vpn has not been allocated for user. """ - network_data = vpn.NetworkData.lookup(Project.safe_id(project)) - if not network_data: + # FIXME(vish): this shouldn't be messing with the datamodel directly + if not isinstance(project, Project): + project = self.get_project(project) + if not project.network: raise exception.NotFound('project network data has not been set') - return (network_data.ip, network_data.port) + return (project.network.vpn_ip_str, project.network.vpn_port) def delete_project(self, project): """Deletes a project""" -- cgit From 62e3bab39fcd9628325c3a16d4b76b5e82e35099 Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Wed, 18 Aug 2010 02:07:04 -0700 Subject: network tests pass --- nova/auth/manager.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'nova/auth') diff --git a/nova/auth/manager.py b/nova/auth/manager.py index d2d4d641b..69816882e 100644 --- a/nova/auth/manager.py +++ b/nova/auth/manager.py @@ -573,9 +573,10 @@ class AuthManager(object): # FIXME(vish): this shouldn't be messing with the datamodel directly if not isinstance(project, Project): project = self.get_project(project) - if not project.network: + if not project.network.vpn_public_port: raise exception.NotFound('project network data has not been set') - return (project.network.vpn_ip_str, project.network.vpn_port) + return (project.network.vpn_public_ip_str, + project.network.vpn_public_port) def delete_project(self, project): """Deletes a project""" -- cgit From f7c556324d52095323ec18296c4064e5bb626c96 Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Wed, 18 Aug 2010 17:38:51 -0700 Subject: fixing more network issues --- nova/auth/manager.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'nova/auth') diff --git a/nova/auth/manager.py b/nova/auth/manager.py index 69816882e..eed67d8c3 100644 --- a/nova/auth/manager.py +++ b/nova/auth/manager.py @@ -529,11 +529,9 @@ class AuthManager(object): member_users) if project_dict: project = Project(**project_dict) - # FIXME(ja): EVIL HACK - this should poll from a pool - session = models.create_session() - net = models.Network(project_id=project.id, kind='vlan') - session.add(net) - session.commit() + # FIXME(ja): EVIL HACK + net = models.Network(project_id=project.id) + net.save() return project def add_to_project(self, user, project): @@ -580,6 +578,10 @@ class AuthManager(object): def delete_project(self, project): """Deletes a project""" + # FIXME(ja): EVIL HACK + if not isinstance(project, Project): + project = self.get_project(project) + project.network.delete() with self.driver() as drv: return drv.delete_project(Project.safe_id(project)) @@ -714,15 +716,15 @@ class AuthManager(object): zippy.writestr(FLAGS.credential_key_file, private_key) zippy.writestr(FLAGS.credential_cert_file, signed_cert) - network_data = vpn.NetworkData.lookup(pid) - if network_data: + (vpn_ip, vpn_port) = self.get_project_vpn_data(project) + if vpn_ip: configfile = open(FLAGS.vpn_client_template,"r") s = string.Template(configfile.read()) configfile.close() config = s.substitute(keyfile=FLAGS.credential_key_file, certfile=FLAGS.credential_cert_file, - ip=network_data.ip, - port=network_data.port) + ip=vpn_ip, + port=vpn_port) zippy.writestr(FLAGS.credential_vpn_file, config) else: logging.warn("No vpn data for project %s" % -- cgit From 152baf34247c5a4b76f643cac0d33c0158de0bfa Mon Sep 17 00:00:00 2001 From: andy Date: Sat, 21 Aug 2010 15:37:00 +0200 Subject: Moves auth.manager to the data layer. A couple weird things are going on, I added a try-except in Manager.delete_project because it seems to have an issue finding the network to delete, I think something is probably deleting it before the tests get a chance to. Also stubbed out task.LoopingCall in service_unittest because there wasn't a good way to kill the task from outside of service.Service.create() --- nova/auth/manager.py | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'nova/auth') diff --git a/nova/auth/manager.py b/nova/auth/manager.py index eed67d8c3..070c5508a 100644 --- a/nova/auth/manager.py +++ b/nova/auth/manager.py @@ -29,6 +29,7 @@ import uuid import zipfile from nova import crypto +from nova import db from nova import exception from nova import flags from nova import models @@ -202,11 +203,6 @@ class Project(AuthBase): ip, port = AuthManager().get_project_vpn_data(self) return port - @property - def network(self): - session = models.create_session() - return session.query(models.Network).filter_by(project_id=self.id).first() - def has_manager(self, user): return AuthManager().is_project_manager(user, self) @@ -498,8 +494,8 @@ class AuthManager(object): return [] return [Project(**project_dict) for project_dict in project_list] - def create_project(self, name, manager_user, - description=None, member_users=None): + def create_project(self, name, manager_user, description=None, + member_users=None, context=None): """Create a project @type name: str @@ -530,8 +526,7 @@ class AuthManager(object): if project_dict: project = Project(**project_dict) # FIXME(ja): EVIL HACK - net = models.Network(project_id=project.id) - net.save() + db.network_create(context, {'project_id': project.id}) return project def add_to_project(self, user, project): @@ -558,7 +553,7 @@ class AuthManager(object): return drv.remove_from_project(User.safe_id(user), Project.safe_id(project)) - def get_project_vpn_data(self, project): + def get_project_vpn_data(self, project, context=None): """Gets vpn ip and port for project @type project: Project or project_id @@ -571,19 +566,27 @@ class AuthManager(object): # FIXME(vish): this shouldn't be messing with the datamodel directly if not isinstance(project, Project): project = self.get_project(project) - if not project.network.vpn_public_port: + + network_ref = db.project_get_network(context, project.id) + + if not network_ref['vpn_public_port']: raise exception.NotFound('project network data has not been set') - return (project.network.vpn_public_ip_str, - project.network.vpn_public_port) + return (network_ref['vpn_public_ip_str'], + network_ref['vpn_public_port']) - def delete_project(self, project): + def delete_project(self, project, context=None): """Deletes a project""" # FIXME(ja): EVIL HACK if not isinstance(project, Project): project = self.get_project(project) - project.network.delete() + network_ref = db.project_get_network(context, project.id) + try: + db.network_destroy(context, network_ref['id']) + except: + logging.exception('Could not destroy network: %s', + network_ref['id']) with self.driver() as drv: - return drv.delete_project(Project.safe_id(project)) + drv.delete_project(Project.safe_id(project)) def get_user(self, uid): """Retrieves a user by id""" -- cgit From 4b5c1b9137f46f811be8f7e55cc540c5898b3369 Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Mon, 23 Aug 2010 20:39:19 -0700 Subject: fix daemons and move network code --- nova/auth/manager.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'nova/auth') diff --git a/nova/auth/manager.py b/nova/auth/manager.py index fc9aec071..e4d4afb7b 100644 --- a/nova/auth/manager.py +++ b/nova/auth/manager.py @@ -524,8 +524,11 @@ class AuthManager(object): member_users) if project_dict: project = Project(**project_dict) - # FIXME(ja): EVIL HACK - db.network_create(context, {'project_id': project.id}) + try: + db.network_allocate(context, project.id) + except: + drv.delete_project(project.id) + raise return project def add_to_project(self, user, project): @@ -574,7 +577,6 @@ class AuthManager(object): def delete_project(self, project, context=None): """Deletes a project""" - # FIXME(ja): EVIL HACK network_ref = db.project_get_network(context, Project.safe_id(project)) try: -- cgit From fab0bbaca8d6cf34f131c4426463bf5c76a0477f Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Sun, 29 Aug 2010 18:53:47 -0700 Subject: tests pass --- nova/auth/manager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'nova/auth') diff --git a/nova/auth/manager.py b/nova/auth/manager.py index a072a143b..62ec3f4e4 100644 --- a/nova/auth/manager.py +++ b/nova/auth/manager.py @@ -252,6 +252,7 @@ class AuthManager(object): __init__ is run every time AuthManager() is called, so we only reset the driver if it is not set or a new driver is specified. """ + self.network_manager = utils.import_object(FLAGS.network_manager) if driver or not getattr(self, 'driver', None): self.driver = utils.import_class(driver or FLAGS.auth_driver) @@ -525,7 +526,8 @@ class AuthManager(object): if project_dict: project = Project(**project_dict) try: - db.network_allocate(context, project.id) + self.network_manager.allocate_network(context, + project.id) except: drv.delete_project(project.id) raise -- cgit From 4374bef0536846afe9be1156b340b34e6d4c8d2d Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Mon, 30 Aug 2010 20:42:31 -0700 Subject: more cleanup and pylint fixes --- nova/auth/manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nova/auth') diff --git a/nova/auth/manager.py b/nova/auth/manager.py index 62ec3f4e4..d5fbec7c5 100644 --- a/nova/auth/manager.py +++ b/nova/auth/manager.py @@ -574,7 +574,7 @@ class AuthManager(object): if not network_ref['vpn_public_port']: raise exception.NotFound('project network data has not been set') - return (network_ref['vpn_public_ip_str'], + return (network_ref['vpn_public_address'], network_ref['vpn_public_port']) def delete_project(self, project, context=None): -- cgit