Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
G
gitlab-getlists
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
gn4-3-wp9-t2
gitlab-getlists
Commits
c5d1d9c5
Commit
c5d1d9c5
authored
1 year ago
by
Tomasz Kaźmierczak
Browse files
Options
Downloads
Patches
Plain Diff
New script - used during migration Ultimate - CE
parent
5dd2d937
Branches
Branches containing commit
No related tags found
No related merge requests found
Pipeline
#83738
canceled
1 year ago
Stage: test
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
projects-and-groups.py
+191
-0
191 additions, 0 deletions
projects-and-groups.py
with
191 additions
and
0 deletions
projects-and-groups.py
0 → 100644
+
191
−
0
View file @
c5d1d9c5
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)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment