+ def update_role(self, role_info):
+ """
+ Change the name of a role
+ :param role_info: full role info
+ :return: None
+ """
+ try:
+ rid = role_info["_id"]
+ if not is_valid_uuid(rid): # Is this required?
+ role_obj_list = self.keystone.roles.list(name=rid)
+ if not role_obj_list:
+ raise AuthconnNotFoundException("Role '{}' not found".format(rid))
+ rid = role_obj_list[0].id
+ self.keystone.roles.update(rid, name=role_info["name"], permissions=role_info.get("permissions"),
+ _admin=role_info.get("_admin"))
+ except ClientException as e:
+ # self.logger.exception("Error during role update using keystone: {}".format(e))
+ raise AuthconnOperationException("Error during role updating using Keystone: {}".format(e))
+
+ def get_project_list(self, filter_q=None):
+ """
+ Get all the projects.
+
+ :param filter_q: dictionary to filter project list.
+ :return: list of projects
+ """
+ try:
+ filter_name = None
+ if filter_q:
+ filter_name = filter_q.get("name")
+ projects = self.keystone.projects.list(name=filter_name)
+
+ projects = [{
+ "name": project.name,
+ "_id": project.id,
+ "_admin": project.to_dict().get("_admin", {}) # TODO: REVISE
+ } for project in projects]
+
+ if filter_q and filter_q.get("_id"):
+ projects = [project for project in projects
+ if filter_q["_id"] == project["_id"]]
+
+ return projects
+ except ClientException as e:
+ # self.logger.exception("Error during user project listing using keystone: {}".format(e))
+ raise AuthException("Error during user project listing using Keystone: {}".format(e),
+ http_code=HTTPStatus.UNAUTHORIZED)
+
+ def create_project(self, project_info):