Es ist schwierig, jedes Mal, wenn eine neue Person hereinkommt, manuell eine Gitlab-Gruppe hinzuzufügen
Ich habe ein Programm mit der GitLab-API erstellt. Basierend auf dem Folgenden wird es in Lambda festgelegt, um es zu einer API zu machen.
Wir führen an einigen Stellen eine Validierung durch. Bitte beziehen Sie sich darauf.
# coding: utf-8
import json, requests, re
import inspect
private_token = '[Bitte stellen Sie auf dem Verwaltungsbildschirm von gitlab aus]'
url_prefix = 'https://[your_gitlab_domain]/api/v4/'
def main(params):
success_group_list = {}
try:
check_empty(params)
user_info = get_user_info(params['user'])
success_group_list = add_group(user_info[0]['id'], params['level'])
except AddGitLabException as e:
info = e.get_info()
return {'body': info['body'], 'code': info['code'], 'function': info['function']}
return {
'code': 200,
'body': 'Success:' + str(success_group_list)
}
#muss geprüft werden
def check_empty(params):
if 'user' not in params or len(params['user']) == 0 or 'level' not in params or len(params['level']) == 0:
raise AddGitLabException('Input require parameter.', 400, inspect.currentframe().f_code.co_name)
#Benutzerinformationen abrufen
def get_user_info(username):
url = url_prefix + 'users?active=true&username=' + username
headers = {'Private-Token': private_token}
response = requests.get(url, headers=headers)
if response.status_code != 200 and response.status_code != 201:
raise AddGitLabException(response.content, response.status_code, inspect.currentframe().f_code.co_name)
user_info = json.loads(response.content)
if user_info[0:1] == False:
#Fehler, wenn der Zielbenutzer nicht vorhanden ist
raise AddGitLabException('Nothing user.', 404, inspect.currentframe().f_code.co_name)
return user_info
#Fügen Sie der Gruppe Zielmitglieder hinzu
def add_group(user_id, level):
success_group = []
for group_info in target_group_list():
for group_name, group_id in group_info.items():
url = url_prefix + 'groups/' + str(group_id) + '/members'
headers = {'Private-Token': private_token}
response = requests.post(url, headers=headers, data={'user_id': user_id, 'access_level': level})
# 200/201:Erfolgreiche Registrierung, 409:Wird nicht als Ausnahme ausgelöst, da es bereits registriert ist
if response.status_code != 200 and response.status_code != 201 and response.status_code != 409:
raise AddGitLabException(response.content, response.status_code, inspect.currentframe().f_code.co_name + ' group_id:' + str(group_id))
success_group.append(group_name + ':' + str(response.status_code))
return success_group
#Holen Sie sich die Zielgruppe
def target_group_list():
return [
{'[group_name1]' : [group_id1]},
{'[group_name2]' : [group_id2]}
]
#Spezielle Ausnahmeklasse
class AddGitLabException(Exception):
def __init__(self, body, code, function):
self.body = body
self.code = code
self.function = function
def get_info(self):
return {'body':self.body,'code':self.code, 'function': self.function}
print(main({'user':'test_user', 'level':'30'}))
Die Gruppen-ID wird manuell über die API abgerufen (siehe unten).
group_id verwendet die Gruppen-API, um group_id abzurufen und mein Bestes zu geben, um sie aufzulisten (da Sie nach dem Erstellen einer Liste danach nicht mehr viel ändern müssen). Bitte lassen Sie mich wissen, ob es eine gute Möglichkeit gibt, sich auf eine bestimmte Gruppe einzugrenzen, ohne sich bemühen zu müssen, sie aufzulisten.
Wenn Sie noch mit einem älteren Gitlab arbeiten, ist möglicherweise nur Version 3 aktiviert.
Unten finden Sie ein Dokument. Versuchen Sie daher, es als Referenz neu anzuordnen.
https://gitlab.com/gitlab-org/gitlab-foss/blob/8-16-stable/doc/api/README.md
Recommended Posts