Wired up get/add/remove project members
This commit is contained in:
@@ -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. """
|
||||||
|
@@ -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):
|
||||||
|
Reference in New Issue
Block a user