2017年6月27日火曜日

VMware Harbor の REST API を有効にしてプロジェクトやユーザに API でアクセスしてみる

概要

VMware Harbor の管理画面で実行されているライブラリやユーザ作成はバックエンドでは API 経由で実行されています
実はこの API は利用者側からも使用することができます
デフォルトではオフになっているので有効にすることで使用できるようになります

環境

  • Ubuntu 16.04
  • Harbor 1.1.1
  • docker-compose 1.13.0
  • docker 17.03

事前作業

Harbor のインストールはオフラインインストールを使って Ubuntu 上にインストールしています
手順はこちらの記事を参考にしてください

REST API の有効化

Harbor が動作しているサーバにログインしてサーバ上で作業する必要があります
harbor は /root/harbor にインストールしているものとします

  • cd /root/harbor
  • wget https://raw.githubusercontent.com/vmware/harbor/master/docs/prepare-swagger.sh https://raw.githubusercontent.com/vmware/harbor/master/docs/swagger.yaml
  • vi prepare-swagger.sh
SCHEME=https
SERVER_IP=reg.your.domain

ここのスキーマとサーバの設定の部分は http で IP ベースで動作している場合は、それを入力してください
ドメインを貼って証明書まで設定してる場合は、https で Harbor に設定したドメインを入力してください

  • chmod +x prepare-swagger.sh
  • ./prepare-swagger.sh

シェルを実行するとカレントに swagger.tar.gz が作成されているはずです

  • cp docker-compose.yml{,.back}
  • vi docker-compose.yml
- ../src/ui/static/vendors/swagger-ui-2.1.4/dist:/harbor/static/vendors/swagger
- ../src/ui/static/resources/yaml/swagger.yaml:/harbor/static/resources/yaml/swagger.yaml

上記 2 行を「ui:」の「volumes:」の部分に追記します
diff だと以下の通りになります

  • diff docker-compose.yml.back docker-compose.yml
79a80,81
>       - ../src/ui/static/vendors/swagger-ui-2.1.4/dist:/harbor/static/vendors/swagger
>       - ../src/ui/static/resources/yaml/swagger.yaml:/harbor/static/resources/yaml/swagger.yaml

あとはコンテナを再起動すれば OK です

  • docker-compose down
  • docker-compose up -d

動作確認

まず https://reg.your.domain/static/vendors/swagger/index.html にアクセスして Swagger UI が表示されることを確認してください
ここで UI が表示されないと API が有効になっていません

表示されたら実際に API をコールしてみましょう
例えばプロジェクトやリポジトリを検索する API /search は以下のようにコールできます

  • curl -X GET --header 'Accept: application/json' 'https://reg.your.domain/api/search?q=library'

結果以下のような json が返却されれば OK です

{
  "project": [
    {
      "project_id": 1,
      "owner_id": 1,
      "name": "library",
      "creation_time": "2017-06-26T08:03:45Z",
      "creation_time_str": "",
      "deleted": 0,
      "owner_name": "",
      "public": 1,
      "Togglable": false,
      "update_time": "2017-06-26T08:03:45Z",
      "current_user_role_id": 0,
      "repo_count": 0
    }
  ],
  "repository": []
}

SDK や詳しいドキュメントはほぼないので、Swagger UI を見ながら API をコールするしかないと思います
swagger.yaml が公開されているので go-swagger を使って swagger generate client すればクライアントツールは簡単に作れるかもしれません

最後に

Harbor の REST API を有効にしてプロジェクトやレジストリの情報にアクセスできるようにしてみました
認証等は特になかったので公開するのは少し危険ですが、プライベートで独自の UI を作ったりするには便利かなと思います

参考サイト

1 件のコメント:

  1. ちなみに /projects などへのアクセスは認証が必要でベーシック認証でアクセスすることができます
    curl の場合は「-u」オプションを指定します

    curl -u admin:Harbor12345 -v -X GET --header 'Accept: application/json' 'https://reg01.harbor.gq/api/projects'

    返信削除