GitLab API を使ってユーザー一括登録
- csvファイルを読み込んで一括でユーザー登録、グループ参加
- python-gitlab を利用してGitLab API を叩く GitHub - python-gitlab/python-gitlab: Python wrapper for the GitLab API
必要なもの
- Python3
- GitLabのAdminユーザーのprivate access token
python-gitlab のセットアップ
- pip を利用してpython-gitlab のインストール
pip install python-gitlab
- 以下のような設定ファイル(python-gitlab.cfg)を用意
[default] url = https://gitlab.somewhere.com/ private_token = AdminAccessToken timeout = 5 ssl_verify = True api_version = 4
ソースコード
#!/usr/bin/env python3 import argparse import csv import gitlab def add_user(api, csvfile): with open(csvfile, 'r') as cf: csvreader = csv.reader(cf, delimiter=',', quotechar='|') for row in csvreader: params = {} params['email'] = row[0] params['username'] = row[1] params['name'] = row[2] params['reset_password'] = True user = api.users.create(params) print('User:{} has created'.format(user)) def add_user_to_group(api, csvfile): all_group = api.groups.list() with open(csvfile, 'r') as cf: csvreader = csv.reader(cf, delimiter=',', quotechar='|') for row in csvreader: user = api.users.list(username=row[0])[0] for i in range(1, len(row)): group = [g for g in all_group if g.full_path == row[i]][0] params = {} params['user_id'] = user.id params['access_level'] = gitlab.DEVELOPER_ACCESS group.members.create(params) print('User:{0} has joined in {1}'.format(user.name, group.name)) if __name__ == "__main__": parser=argparse.ArgumentParser() parser.add_argument('--csvfile') parser.add_argument('--group', action='store_true') args=parser.parse_args() api=gitlab.Gitlab.from_config(config_files=['./python-gitlab.cfg']) gl.session.proxies = { 'http': 'http://yourproxy.com:9090', 'https': 'https://yourproxy.com:8443' } if args.group: add_user_to_group(api=api, csvfile=args.csvfile) else: add_user(api=api, csvfile=args.csvfile)
補足と解説
api=gitlab.Gitlab.from_config(config_files=['./python-gitlab.cfg']) gl.session.proxies = { 'http': 'http://yourproxy.com:9090', 'https': 'https://yourproxy.com:8443' }
- ユーザー登録時にパスワードを設定させるメールを送るようにしています
params['reset_password'] = True
決まった初期パスワードを設定したいときは以下のようにします
params['password'] = 'secret_p@ssw0rd'
- Group に追加するときはDeveloper として登録されます
params['access_level'] = gitlab.DEVELOPER_ACCESS
使い方
ユーザー登録
- 以下のようなcsvファイルを用意する。左からメールアドレス、ログインID、表示名です。
tom.brady@patriots.com,tom.brady,Tom Brady david.andrews@patriots.com,david.andrews,David Andrews patrick.chung@patriots.com,patrick.chung,Patrick Chung
- スクリプトを実行する
./add-user --csvfile filename.csv
ユーザーのグループ参加
- 以下のようなcsvファイルを用意する。一番左にユーザーのログインID、右に登録したいグループをフルパスで並べます。
tom.brady,offence david.andrews,offence,offence/lines patrick.chung,defence
--group
を引数につけてスクリプトを実行する。
./add-user --group --csvfile filename.csv
終わりに
- やっつけでつくったものですが、それなりに綺麗にかけたかなと。
- グループ登録時の権限指定はファイルに書くようにしたいですね。
- コードやサンプルファイルはGitHubに置きました。よろしければご利用ください。
業務ではPythonを使うことが多くなってきました。こういうことをパッと出来ると成長を感じますね。 AWSのLambdaなども書く機会が増えてきたので、Python繋がりでそういう記事も書きたいです。