diff --git a/projects-and-groups.py b/projects-and-groups.py new file mode 100644 index 0000000000000000000000000000000000000000..6dffb00bd022c2cbfdfc2f7ec058721a6e3b31bd --- /dev/null +++ b/projects-and-groups.py @@ -0,0 +1,191 @@ +import gitlab +# import requests +# import json +import argparse +import os +from dotenv import load_dotenv + +# import pandas as pd + +parser = argparse.ArgumentParser(description="Users and his projects from gitlab") + +parser.add_argument("--production", action='store_true', help="Use for Production") +parser.add_argument("--developer", action='store_true', help="Use for Developer") +args = parser.parse_args() + +load_dotenv() + +if args.production: + token = os.getenv('PRODUCTION_TOKEN') + print('Production Mode, connect to server') + headers = {'PRIVATE-TOKEN': token} + gl = gitlab.Gitlab(url='https://gitlab.geant.org', private_token=token) + # gl_proj = 'https://gitlab.geant.org/api/v4/projects' + projects = gl.projects.list(all=True) + # groups = gl.groups.list(all=False) + # gl.auth() + # gl.enable_debug() +elif args.developer: + token = os.getenv('CE_PRODUCTION_TOKEN') + print('Developer Mode, connect to server') + headers = {'PRIVATE-TOKEN': token} + gl = gitlab.Gitlab(url='https://gitlab.software.geant.org', private_token=token) + projects = gl.projects.list(all=True) + # groups = gl.groups.list(all=True) +else: + print("--production or --developer, please, now exit") + exit() + + +def proj_group_list(p_id: int) -> list: + '''zwraca id projektów danej grupy''' + edu = gl.groups.get(p_id, lazy=True, all=True) + p_list_name = [] + for e in edu.projects.list(lazy=True, all=True): + p_list_name.append(e.id) + return p_list_name + + +def print_group_list_names(p_id: int): + '''zwraca nazwę projektów danej grupy''' + edu = gl.groups.get(p_id, lazy=True, all=True) + print(edu) + for e in edu.projects.list(lazy=True, all=True): + print(e.name_with_namespace) + # return p_list_name + + +def arch_project(p_id: int) -> str: + """archiwizuje wskazany projekt""" + project = gl.projects.get(p_id) + project.archive() + odp = "archiwizacja projektu " + str(p_id) + return odp + + +def ce_only_projects(no_groups: list) -> list: + """zwraca listę projektów bez tych, + które pozostają w unlimited""" + tmp_list = [] + for project in projects: + # print(project.id) + if project.id not in no_groups: + tmp_list.append(project.id) + return tmp_list + + +def proj_group_and_subgroup(group_list: list) -> list: + """lista projektów grup i subgroup""" + a_tmp_list = [] + for gr in group_list: + b_tmp_list = proj_group_list(gr) + for b in b_tmp_list: + a_tmp_list.append(b) + return a_tmp_list + + +def group_members(id_gr: int) -> list: + """tworzy listę użytkowników podanej grupy""" + u_tmp_list = [] + group = gl.groups.get(id_gr) + members = group.members_all.list(get_all=True) + for member in members: + u_tmp_list.append(member.id) + return u_tmp_list + + +# InAcademia / dev => 260 +# InAcademia / Ops => 362 + +# eduTEAMS / Core AAI Platform => 779 +# eduTEAMS / Customer deployments => 773 +# eduTEAMS / Test deployments => 774 +# eduTEAMS / Internal Tooling => 777 +# eduTEAMS / Auth Proxy => 772 +# eduTEAMS / Consent Management => 780 +# eduTEAMS / Discovery Service => 776 +# eduTEAMS / MDX => 775 +# eduTEAMS / Membership Management System => 781 +# eduTEAMS / Service Management => 778 + +# lokalni użytkownicy Gitlab +exclude_users = ['root', 'ghost', 'tkazmierczak', 'visual-review-bot', 'jacques', 'pawel.sierota', 'support-bot', + 'psierota', 'pisarz', 'alert-bot', 'mathias.baggendorf', 'rash.mali'] + +# InAcademia members groups +ina_groups = [29, 260, 362] + +# InAcademia all projects +ina_projects_list = proj_group_and_subgroup(ina_groups) + +# EduTeams member groups +edu_groups = [146, 779, 773, 774, 777, 772, 780, 776, 775, 781, 778] + +# EduTeams all projects +edu_projects_list = proj_group_and_subgroup(edu_groups) + +# Ultimate - all projects +ultimate_projects_list = edu_projects_list + ina_projects_list + +# List of projects moved to CE +ce_projects_list = ce_only_projects(ultimate_projects_list) + +""" lista użytkowników grup Ultimate""" +edu_members = group_members(146) +# print("edu members: " + str(edu_members)) +# +ina_members = group_members(29) +# print("InAcademia users: " + str(ina_members)) + +""" lista pozostałych projektów """ +# print("InAcademia Projects: " + str(ina_projects_list)) +# print("EduTeams Projects: " + str(edu_projects_list)) +# print("CE project: " + str(ce_projects_list)) + +"""lista redirect, umieszczona później na serwerze Ultimate""" +# for rl in ce_projects_list: +# project_ = gl.projects.get(rl) +# print("# " + str(rl)) +# print(f"rewrite ^/{project_.path_with_namespace}$" + " " + +# f"https://gitlab.software.geant.org/{project_.path_with_namespace} ;") +# print(f"rewrite ^/{project_.path_with_namespace}.git$" + " " + +# f"https://gitlab.software.geant.org/{project_.path_with_namespace}.git ;") +# # print(project_.http_url_to_repo) +# print(f"rewrite ^/{project_.path_with_namespace}/(.*)$" + " " + +# f"https://gitlab.software.geant.org/{project_.path_with_namespace}/$1 ;") +# print(f"rewrite ^/api/v4/project/{project_.id}/(.*)$" + " " + +# f"https://gitlab.software.geant.org/api/v4/project/{project_.id}/$1 ;") +# print("####") + + +""" archiwizacja wszystkich projektów, które nie zostają na ultimate""" +# print("Archiwizacja projektów...") +# for rl in ce_projects_list: +# tmp_a = arch_project(rl) +# print(tmp_a) + +""" archiwizacja projektów Ultimate na CE""" +# # print("Archiwizacja projektów...") +# for rl in ultimate_projects_list: +# tmp_a = arch_project(rl) +# print(tmp_a) + +""" użytkownicy lokalni/ldap w gitlab""" +gitlab_members = [] +for u in exclude_users: + tmp_user = gl.users.list(username=u)[0] + gitlab_members.append(tmp_user.id) +print("Gitlab Exclude users: " + str(gitlab_members)) + +""" Ultimate - wyłączenie użytkowników spoza projektów Ultimate""" +# users = gl.users.list(lazy=True, all=True) +# for user in users: +# if user.id not in gitlab_members + ina_members + edu_members: +# tmp_user = gl.users.get(user.id) +# tmp_user.block() +# print("Blocked user: " + tmp_user.username) + +""" CE - archiwizacja projektów, które pozostały na Ultimate """ +# for project in projects: +# if project.id in ultimate_projects_list: +# print(project.name_with_namespace)