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