+ self.grafana.delete_dashboard(dashboard_uid)
+ log.debug("Deleted obsolete dashboard: %s", dashboard_uid)
+ else:
+ log.debug("All dashboards in use")
+
+ # Delete obsolute datasources
+ for datasource_name in datasource_names:
+ if datasource_name not in osm_datasource_names:
+ self.grafana.delete_datasource(datasource_name)
+ log.debug("Deleted obsolete datasource: %s", datasource_name)
+ else:
+ log.debug("All dashboards in use")
+
+ def create_grafana_user(self, user):
+ self.grafana.create_grafana_users(user)
+
+ def delete_non_existing_users(self):
+ if self.keystone:
+ # Get users from keystone
+ users = self.keystone.getUsers()
+ usernames = []
+ for user in users:
+ usernames.append(user.name)
+ grafana_users = self.grafana.get_grafana_users()
+ users_to_be_deleted = list(set(grafana_users) - set(usernames))
+ for grafana_user in users_to_be_deleted:
+ self.grafana.delete_grafana_users(grafana_user)
+
+ def create_grafana_team_member(
+ self, project_data, userid=None, project_list=None, user=None
+ ):
+ if user:
+ user_name = user
+ else:
+ try:
+ # Get user details from commondb
+ user = self.common_db.get_user_by_id(userid)
+ user_name = user["username"]
+ except Exception as e:
+ # User not found in commondb
+ if self.keystone:
+ # Search user in keystone
+ user = self.keystone.getUserById(userid)
+ user_name = user.name
+ else:
+ log.info("User %s not found", userid)
+ log.debug("Exception %s" % e)
+ if project_list:
+ # user-project mapping is done by osm cli
+ for proj in project_data:
+ project = self.common_db.get_project(proj["project"])
+ proj_name = project["name"]
+ role_obj = self.common_db.get_role_by_id(proj["role"])
+ is_admin = role_obj["permissions"].get("admin")
+ self.grafana.create_grafana_teams_members(
+ proj_name, user_name, is_admin, project_list
+ )
+ else:
+ # user-project mapping is done by osm ui
+ proj_list = []
+ if self.keystone:
+ users_proj_list = self.keystone.getProjectsById(userid)
+ for project in users_proj_list:
+ proj_list.append(project.name)
+ else:
+ users_proj_list = user.get("project_role_mappings")
+ for project in users_proj_list:
+ proj_data = self.common_db.get_project(project["project"])
+ proj_list.append(proj_data["name"])
+ for proj in project_data:
+ if self.keystone:
+ # Backend authentication type is keystone
+ try:
+ # Getting project and role objects from keystone using ids
+ role_obj = self.keystone.getRoleById(proj["role"])
+ proj_data = self.keystone.getProjectsByProjectId(
+ proj["project"]
+ )
+ log.info(
+ "role object {} {}".format(
+ role_obj.permissions, proj_data.name
+ )
+ )
+ is_admin = role_obj.permissions["admin"]
+ except Exception:
+ # Getting project and role objects from keystone using names
+ role_obj = self.keystone.getRoleByName(proj["role"])[0]
+ proj_data = self.keystone.getProjectsByProjectName(
+ proj["project"]
+ )[0]
+ is_admin = role_obj.to_dict().get("permissions").get("admin")
+ log.info(
+ "role object {} {}".format(
+ role_obj.to_dict(), proj_data.name
+ )
+ )
+ proj_name = proj_data.name
+ else:
+ # Backend authentication type is internal
+ try:
+ # Getting project and role object from commondb using names
+ role_obj = self.common_db.get_role_by_name(proj["role"])
+ proj_name = proj["project"]
+ except Exception:
+ # Getting project and role object from commondb using ids
+ role_obj = self.common_db.get_role_by_id(proj["role"])
+ proj_data = self.common_db.get_project(proj["project"])
+ proj_name = proj_data["name"]
+ is_admin = role_obj["permissions"].get("admin")
+ self.grafana.create_grafana_teams_members(
+ proj_name, user_name, is_admin, proj_list
+ )
+
+ def create_grafana_team(self, team_name):
+ self.grafana.create_grafana_teams(team_name)
+
+ def delete_grafana_user(self, user_name):
+ self.grafana.delete_grafana_users(user_name)
+
+ def delete_grafana_team(self, project_name):
+ self.grafana.delete_grafana_team(project_name)
+
+ def update_grafana_team(self, project_new_name, project_old_name):
+ self.grafana.update_grafana_teams(project_new_name, project_old_name)
+
+ def remove_grafana_team_members(self, user_id, proj_data):
+ try:
+ # Get user details from commondb
+ user = self.common_db.get_user_by_id(user_id)
+ user_name = user["username"]
+ except Exception as e:
+ # User not found in commondb
+ if self.keystone:
+ # Find user in keystone
+ user = self.keystone.getUserById(user_id)
+ user_name = user.name