[PYTHON] Verwenden Sie gitlabApi, um Mitglieder zu mehreren Gruppen in gitlab gleichzeitig hinzuzufügen

Aufgabe

Es ist schwierig, jedes Mal, wenn eine neue Person hereinkommt, manuell eine Gitlab-Gruppe hinzuzufügen

Lösung

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.

Prozessablauf

Wir führen an einigen Stellen eine Validierung durch. Bitte beziehen Sie sich darauf.

Programm

# 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).

gitlabAPI v4 groups

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 gitlabApi v3 ist

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

Verwenden Sie gitlabApi, um Mitglieder zu mehreren Gruppen in gitlab gleichzeitig hinzuzufügen
Kombinieren Sie mehrere Wörterbücher und fügen Sie mehrere Elemente gleichzeitig sicher und zerstörungsfrei in Python hinzu
Registrieren Sie mehrere selbst erstellte Stile gleichzeitig in Word
[Laravel] Ein Alias, der eine Migrationsdatei für mehrere Tabellen gleichzeitig erstellt.
Verwendung von Klassen in Theano
Mock in Python-Wie man Mox benutzt
Verwendung von SQLite in Python
Wie man MySQL mit Python benutzt
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
Erstellen Sie mehrere Benutzer mit Seriennummern gleichzeitig in Ansible Playbook: Teil 2
Fügen Sie dem Benutzerwörterbuch von MeCab unter Ubuntu Wörter zur Verwendung in Python hinzu