Wired up get/add/remove project members

This commit is contained in:
Devin Carlen
2010-07-28 21:04:05 +00:00
parent 958d3b6ff2
commit c530e9839f
2 changed files with 78 additions and 16 deletions

View File

@@ -59,16 +59,18 @@ class UserInfo(object):
class ProjectInfo(object): class ProjectInfo(object):
""" """
Information about a Nova project, as parsed through SAX Information about a Nova project, as parsed through SAX
fields include: Fields include:
projectname projectname
description description
member_ids projectManagerId
memberIds
""" """
def __init__(self, connection=None, projectname=None, endpoint=None): def __init__(self, connection=None):
self.connection = connection self.connection = connection
self.projectname = projectname self.projectname = None
self.endpoint = endpoint self.description = None
self.projectManagerId = None
self.memberIds = [] self.memberIds = []
def __repr__(self): def __repr__(self):
@@ -78,11 +80,40 @@ class ProjectInfo(object):
return None return None
def endElement(self, name, value, connection): def endElement(self, name, value, connection):
if name == 'item': if name == 'projectname':
self.projectname = value
elif name == 'description':
self.description = value
elif name == 'projectManagerId':
self.projectManagerId = value
elif name == 'memberId':
self.memberIds.append(value) self.memberIds.append(value)
elif name != 'memberIds': else:
setattr(self, name, str(value)) setattr(self, name, str(value))
class ProjectMember(object):
"""
Information about a Nova project member, as parsed through SAX.
Fields include:
memberId
"""
def __init__(self, connection=None):
self.connection = connection
self.memberId = None
def __repr__(self):
return 'ProjectMember:%s' % self.memberId
def startElement(self, name, attrs, connection):
return None
def endElement(self, name, value, connection):
if name == 'member':
self.memberId = value
else:
setattr(self, name, str(value))
class HostInfo(object): class HostInfo(object):
""" """
Information about a Nova Host, as parsed through SAX: Information about a Nova Host, as parsed through SAX:
@@ -193,11 +224,16 @@ class NovaAdminClient(object):
} }
return self.apiconn.get_status('ModifyUserRole', params) return self.apiconn.get_status('ModifyUserRole', params)
def get_projects(self): def get_projects(self, user=None):
""" """
Returns a list of all projects. Returns a list of all projects.
""" """
return self.apiconn.get_list('DescribeProjects', {}, if user:
params = {'User': user}
else:
params = {}
return self.apiconn.get_list('DescribeProjects',
params,
[('item', ProjectInfo)]) [('item', ProjectInfo)])
def get_project(self, name): def get_project(self, name):
@@ -232,8 +268,27 @@ class NovaAdminClient(object):
{'Name': projectname}, {'Name': projectname},
ProjectInfo) ProjectInfo)
def modify_project_user(self, user, project, operation='add', def get_project_members(self, name):
**kwargs): """
Returns a list of members of a project.
"""
return self.apiconn.get_list('DescribeProjectMembers',
{'Name': name},
[('item', ProjectMember)])
def add_project_member(self, user, project):
"""
Adds a user to a project.
"""
return self.modify_project_member(user, project, operation='add')
def remove_project_member(self, user, project):
"""
Removes a user from a project.
"""
return self.modify_project_member(user, project, operation='remove')
def modify_project_member(self, user, project, operation='add'):
""" """
Adds or removes a user from a project. Adds or removes a user from a project.
""" """
@@ -242,7 +297,7 @@ class NovaAdminClient(object):
'Project': project, 'Project': project,
'Operation': operation 'Operation': operation
} }
return self.apiconn.get_status('ModifyProjectUser', params) return self.apiconn.get_status('ModifyProjectMember', params)
def get_zip(self, username): def get_zip(self, username):
""" returns the content of a zip file containing novarc and access credentials. """ """ returns the content of a zip file containing novarc and access credentials. """

View File

@@ -44,7 +44,6 @@ def project_dict(project):
'projectname': project.id, 'projectname': project.id,
'project_manager_id': project.project_manager_id, 'project_manager_id': project.project_manager_id,
'description': project.description, 'description': project.description,
'member_ids': project.member_ids
} }
else: else:
return {} return {}
@@ -137,10 +136,9 @@ class AdminController(object):
@admin_only @admin_only
def describe_projects(self, context, user=None, **kwargs): def describe_projects(self, context, user=None, **kwargs):
"""Returns all projects - should be changed to deal with a list.""" """Returns all projects - should be changed to deal with a list."""
# TODO(devcamcar): Implement filter by user.
return {'projectSet': return {'projectSet':
[project_dict(u) for u in [project_dict(u) for u in
manager.AuthManager().get_projects()]} manager.AuthManager().get_projects(user=user)]}
@admin_only @admin_only
def register_project(self, context, name, manager_user, description=None, def register_project(self, context, name, manager_user, description=None,
@@ -162,7 +160,15 @@ class AdminController(object):
return True return True
@admin_only @admin_only
def modify_project_user(self, context, user, project, operation, **kwargs): def describe_project_members(self, context, name, **kwargs):
project = manager.AuthManager().get_project(name)
result = {
'members': [{'member': m} for m in project.member_ids]
}
return result
@admin_only
def modify_project_member(self, context, user, project, operation, **kwargs):
"""Add or remove a user from a project.""" """Add or remove a user from a project."""
if operation =='add': if operation =='add':
manager.AuthManager().add_to_project(user, project) manager.AuthManager().add_to_project(user, project)
@@ -170,6 +176,7 @@ class AdminController(object):
manager.AuthManager().remove_from_project(user, project) manager.AuthManager().remove_from_project(user, project)
else: else:
raise exception.ApiError('operation must be add or remove') raise exception.ApiError('operation must be add or remove')
return True
@admin_only @admin_only
def describe_hosts(self, _context, **_kwargs): def describe_hosts(self, _context, **_kwargs):