Gitlab APIのメモです。
ユーザを作成する
Admin権限を持ってないと多分できないです。"api"スコープを持ったアクセストークンを作ってやります。name, emailとパスワードに関するキー(passwordでパスワード指定するか、force_random_password&reset_passwordでランダムなパスワードを設定して初回ログイン時に変更させる)だけあれば登録できます。
$ curl -X POST -H 'Private-Token: アクセストークン' -H 'Content-Type: application/json' -d ' { "name":"john", "email":"john@ドメイン", "password":"xxxxx" }' http://gitlabホスト名/api/v4/users
レスポンスです。
{ "id": 7, "name": "john", "username": "john", "state": "active", "avatar_url": "https://www.gravatar.com/avatar/xxxxxxxxxxxxxxxxxxxxx?s=80&d=identicon", "web_url": "http://gitlabホスト名/john", "created_at": "2020-10-26T14:48:10.536Z", "bio": "", "bio_html": "", "location": null, "public_email": "", "skype": "", "linkedin": "", "twitter": "", "website_url": "", "organization": null, "job_title": "", "work_information": null, "last_sign_in_at": null, "confirmed_at": null, "last_activity_on": null, "email": "john@ドメイン", "theme_id": 1, "color_scheme_id": 1, "projects_limit": 100000, "current_sign_in_at": null, "identities": [], "can_create_group": true, "can_create_project": true, "two_factor_enabled": false, "external": false, "private_profile": false, "shared_runners_minutes_limit": null, "extra_shared_runners_minutes_limit": null, "is_admin": false, "note": null, "using_license_seat": false }
ユーザの一覧を取得する
こちらはadministratorじゃなくてもできました(とはいいつつ厳密な権限は確認してません)。/api/v4/usersにGETするだけです。
$ curl -H 'Private-Token: アクセストークン' -sS http://gitlabホスト名/api/v4/users
レスポンスはこういう感じ。
[ { "id": 29, "name": "tom", "username": "tom", "state": "active", "avatar_url": "https://www.gravatar.com/avatar/xxxxxxxxxxxxxxxxxxxx?s=80&d=identicon", "web_url": "http://gitlabホスト名/tom" }, { "id": 28, "name": "steven", "username": "steven", "state": "active", "avatar_url": "https://www.gravatar.com/avatar/xxxxxxxxxxxxxxxxxxxx?s=80&d=identicon", "web_url": "http://gitlabホスト名/steven" }, ... ]
ただし、最大で20件までしか返ってきません。20件以上の場合はページネーションする必要があります。レスポンスヘッダを見てみましょう。
$ curl -H 'Private-Token: アクセストークン' -sS -i http://gitlabホスト名/api/v4/users HTTP/1.1 200 OK ...snip... X-Next-Page: 2 X-Page: 1 X-Per-Page: 20 X-Prev-Page: ...snip... X-Total: 29 X-Total-Pages: 2 ...snip...
29件のユーザがいて、1ページあたり20ユーザ、現在は1ページ目ということですね。2ページ目を指定するには以下のようにリクエストパラメータを付与します。
$ curl -H 'Private-Token: アクセストークン' -sS -i http://gitlabホスト名/api/v4/users?page=2
レスポンスヘッダが変わっていますね。
HTTP/1.1 200 OK ...snip... X-Next-Page: X-Page: 2 X-Per-Page: 20 X-Prev-Page: 1 ...snip... X-Total: 29 X-Total-Pages: 2 ...snip...
ユーザのSSH公開鍵を登録する
/api/v4/users/ユーザのID/keysにPOSTします。公開鍵文字列を埋め込んでるところのクォートがポイントですね。
$ curl -X POST -H 'Private-Token: アクセストークン' -H 'Content-Type: application/json' -d '{"title":"'test key, "key":"'"$(cat ~/.ssh/id_rsa.pub)"'"}' "http://gitlabホスト名/api/v4/users/7/keys"
ユーザのSSH公開鍵を参照する
GETするだけですね。
$ curl -X POST -H 'Private-Token: アクセストークン' "http://gitlabホスト名/api/v4/users/7/keys"
[ { "id": 27, "title": "test-key", "created_at": "2020-10-26T15:58:30.228Z", "expires_at": null, "key": "ssh-rsa ...(snip)... hogehoge (gitlabホスト名)" } ]
まとめ
Gitlab APIのメモでした。あとはグループ情報をうまく取って、これらと組み合わせると、STNSのユーザ設定ファイルが作成できますねぇ・・・
2020/11/06追記
ということで作りました。エラー処理とかちゃんとやってないですし、複数のグループに登録されていた場合どうなるのか?とかも考慮してませんが、とりあえず。
- 事前にGitLabでトークンを取得しておきます。
- groupはadminレベルじゃないと取れないのでご注意。
- GitLabにユーザ・グループを作成して、各ユーザのSSH公開鍵を登録しておきます。
- 以下のスクリプトを実行すると、グループごとにSTNS用の設定ファイルを出力します。