グループリポジトリのAPI移動

GitLab 13.9 で導入されました

グループWikiリポジトリをストレージ間で移動することができます。このAPIは、例えばGitalyクラスタへのマイグレーションや グループWikiのマイグレーションに役立ちます。このAPIはグループ内のプロジェクトリポジトリを管理しません。プロジェクトの移動をスケジュールするには、プロジェクトリポジトリストレージ移動APIを使用してください。

グループリポジトリの移動が処理されると、さまざまな状態に遷移します。state の値は次のとおりです:

  • initial:レコードは作成されましたが、バックグラウンドジョブはまだスケジュールされていません。
  • scheduled:バックグラウンド・ジョブはスケジュール済みです。
  • started:グループリポジトリをコピー先ストレージにコピー中です。
  • replicated:グループを移動しました。
  • failed:グループのリポジトリがコピーに失敗したか、チェックサムが一致しませんでした。
  • finished:グループは移動され、移動元のリポジトリは削除されました。
  • cleanup failed:グループは移動されましたが、ソースストレージ上のリポジトリは削除できませんでした。

データのインテグレーションを保証するため、グループは移動の間、一時的に読み取り専用状態になります。この間、ユーザーが新しいコミットをプッシュしようとすると、このメッセージが表示されます:

The repository is temporarily read-only. Please try again later.

このAPIを使用するには、管理者としての認証が必要です。

他の種類のリポジトリを移動するためのAPIも利用可能です:

すべてのグループリポジトリの移動を取得します。

GET /group_repository_storage_moves

デフォルトでは、API の結果はページ分割されているため、GET リクエストは一度に 20 件の結果を返します。

リクエストの例

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/group_repository_storage_moves"

応答例

[
  {
    "id": 1,
    "created_at": "2020-05-07T04:27:17.234Z",
    "state": "scheduled",
    "source_storage_name": "default",
    "destination_storage_name": "storage2",
    "group": {
      "id": 283,
      "web_url": "https://gitlab.example.com/groups/testgroup",
      "name": "testgroup"
    }
  }
]

単一のグループのすべてのリポジトリストレージの移動を取得します。

単一のグループのすべてのリポジトリストレージの移動を取得するには、次のエンドポイントを使用できます:

GET /groups/:group_id/repository_storage_moves

デフォルトでは、API の結果はページ分割されているため、GET リクエストは一度に 20 件の結果を返します。

サポートされる属性:

属性種類必須説明
group_id整数。yesグループのID。

リクエストの例

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/1/repository_storage_moves"

応答例

[
  {
    "id": 1,
    "created_at": "2020-05-07T04:27:17.234Z",
    "state": "scheduled",
    "source_storage_name": "default",
    "destination_storage_name": "storage2",
    "group": {
      "id": 283,
      "web_url": "https://gitlab.example.com/groups/testgroup",
      "name": "testgroup"
    }
  }
]

単一のグループリポジトリのストレージ移動の取得

既存のすべてのリポジトリストレージ移動を通して単一のリポジトリストレージ移動を取得するには、次のエンドポイントを使用できます:

GET /group_repository_storage_moves/:repository_storage_id

サポートされる属性:

属性種類必須説明
repository_storage_id整数。yesグループリポジトリのストレージ移動の ID。

リクエストの例

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/group_repository_storage_moves/1"

応答例

{
  "id": 1,
  "created_at": "2020-05-07T04:27:17.234Z",
  "state": "scheduled",
  "source_storage_name": "default",
  "destination_storage_name": "storage2",
  "group": {
    "id": 283,
    "web_url": "https://gitlab.example.com/groups/testgroup",
    "name": "testgroup"
  }
}

グループの単一のリポジトリストレージの移動を取得します。

グループを指定すると、そのグループの特定のリポジトリストレージの移動を、次のエンドポイントから取得できます:

GET /groups/:group_id/repository_storage_moves/:repository_storage_id

サポートされる属性:

属性種類必須説明
group_id整数。yesグループのID。
repository_storage_id整数。yesグループリポジトリのストレージ移動の ID。

リクエストの例

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/1/repository_storage_moves/1"

応答例

{
  "id": 1,
  "created_at": "2020-05-07T04:27:17.234Z",
  "state": "scheduled",
  "source_storage_name": "default",
  "destination_storage_name": "storage2",
  "group": {
    "id": 283,
    "web_url": "https://gitlab.example.com/groups/testgroup",
    "name": "testgroup"
  }
}

グループのリポジトリストレージの移動をスケジュールします。

グループのリポジトリストレージの移動をスケジュールします。このエンドポイントは

  • グループの Wiki リポジトリのみを移動します。
  • グループ内のプロジェクトのリポジトリは移動しません。プロジェクトの移動をスケジュールするには、プロジェクトリポジトリ移動APIを使用してください。
POST /groups/:group_id/repository_storage_moves

サポートされる属性:

属性種類必須説明
group_id整数。yesグループのID。
destination_storage_name文字列です。いいえ保存先ストレージシャードの名前。GitLab 13.5以降では、提供されていない場合、ストレージの重みに基づいてストレージが選択されます。

リクエストの例

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --data '{"destination_storage_name":"storage2"}' \
     "https://gitlab.example.com/api/v4/groups/1/repository_storage_moves"

応答例

{
  "id": 1,
  "created_at": "2020-05-07T04:27:17.234Z",
  "state": "scheduled",
  "source_storage_name": "default",
  "destination_storage_name": "storage2",
  "group": {
    "id": 283,
    "web_url": "https://gitlab.example.com/groups/testgroup",
    "name": "testgroup"
  }
}

ストレージシャード上のすべてのグループのリポジトリストレージの移動をスケジュールします。

ソース ストレージ シャードに保存されている各グループ リポジトリのリポジトリ ストレージ移動をスケジュールします。このエンドポイントは、すべてのグループを一度にマイグレーションします。詳細については、「すべてのグループを移動する」を参照してください。

POST /group_repository_storage_moves

サポートされる属性:

属性種類必須説明
source_storage_name文字列です。yesソースストレージシャードの名前。
destination_storage_name文字列です。いいえ宛先ストレージ・シャードの名前。提供されない場合は、ストレージの重みに基づいてストレージが選択されます。

リクエストの例

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --data '{"source_storage_name":"default"}' \
     "https://gitlab.example.com/api/v4/group_repository_storage_moves"

応答例

{
  "message": "202 Accepted"
}