Il est difficile d'ajouter manuellement un groupe gitlab à chaque fois qu'une nouvelle personne arrive
J'ai créé un programme à l'aide de l'API GitLab. Sur la base de ce qui suit, il est défini dans Lambda pour en faire une API.
--Valider les valeurs d'entrée (utilisateur: nom d'utilisateur et niveau: autorisations)
Nous effectuons une validation à certains endroits, veuillez donc vous y référer.
# coding: utf-8
import json, requests, re
import inspect
private_token = '[Veuillez sortir de l'écran de gestion de gitlab]'
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)
}
#besoin de vérifier
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)
#Obtenir des informations utilisateur
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:
#Erreur si l'utilisateur cible n'existe pas
raise AddGitLabException('Nothing user.', 404, inspect.currentframe().f_code.co_name)
return user_info
#Ajouter des membres cibles au groupe
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:Inscription réussie, 409:Comme il est déjà enregistré, ne le lancez pas comme une exception
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
#Obtenez le groupe cible
def target_group_list():
return [
{'[group_name1]' : [group_id1]},
{'[group_name2]' : [group_id2]}
]
#Classe d'exception dédiée
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'}))
L'ID de groupe est obtenu manuellement à l'aide de l'API (voir ci-dessous).
group_id utilise l'API groups pour obtenir group_id et fait de mon mieux pour le lister (car une fois que vous faites une liste, vous n'avez pas à changer grand-chose après cela) S'il vous plaît laissez-moi savoir s'il existe un bon moyen de se limiter à un groupe spécifique sans essayer de l'énumérer.
Si vous travaillez toujours avec un ancien gitlab, vous n'avez peut-être activé que la v3.
Il y a un document ci-dessous, alors essayez de le réorganiser pour référence.
https://gitlab.com/gitlab-org/gitlab-foss/blob/8-16-stable/doc/api/README.md
Recommended Posts