正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

プロジェクトリポジトリストレージの移動API

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed、GitLab Dedicated

プロジェクトリポジトリ(Wikiやデザインリポジトリを含む)は、ストレージ間で移動できます。このAPIは、例えばGitalyクラスター (Praefect) へ移行する際に役立ちます。

プロジェクトリポジトリストレージの移動が処理されると、それらは異なる状態を移行します。stateの値は次のとおりです:

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

データ整合性を確保するため、移動期間中、プロジェクトは一時的な読み取り専用状態になります。この期間中、ユーザーが新しいコミットをプッシュしようとすると、The repository is temporarily read-only. Please try again later.メッセージを受け取ります。

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

他のリポジトリの種類については、以下を参照してください:

すべてのプロジェクトリポジトリストレージの移動を一覧表示

GET /project_repository_storage_moves

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

リクエスト例:

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

レスポンス例:

[
  {
    "id": 1,
    "created_at": "2020-05-07T04:27:17.234Z",
    "state": "scheduled",
    "source_storage_name": "default",
    "destination_storage_name": "storage2",
    "project": {
      "id": 1,
      "description": null,
      "name": "project1",
      "name_with_namespace": "John Doe2 / project1",
      "path": "project1",
      "path_with_namespace": "namespace1/project1",
      "created_at": "2020-05-07T04:27:17.016Z"
    }
  }
]

プロジェクトのすべてのリポジトリストレージの移動を一覧表示

GET /projects/:project_id/repository_storage_moves

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

パラメータは以下のとおりです:

属性必須説明
project_id整数はいプロジェクトのID

リクエスト例:

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

レスポンス例:

[
  {
    "id": 1,
    "created_at": "2020-05-07T04:27:17.234Z",
    "state": "scheduled",
    "source_storage_name": "default",
    "destination_storage_name": "storage2",
    "project": {
      "id": 1,
      "description": null,
      "name": "project1",
      "name_with_namespace": "John Doe2 / project1",
      "path": "project1",
      "path_with_namespace": "namespace1/project1",
      "created_at": "2020-05-07T04:27:17.016Z"
    }
  }
]

プロジェクトリポジトリストレージの移動を取得する

GET /project_repository_storage_moves/:repository_storage_id

パラメータは以下のとおりです:

属性必須説明
repository_storage_id整数はいプロジェクトリポジトリストレージの移動のID

リクエスト例:

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

レスポンス例:

{
  "id": 1,
  "created_at": "2020-05-07T04:27:17.234Z",
  "state": "scheduled",
  "source_storage_name": "default",
  "destination_storage_name": "storage2",
  "project": {
    "id": 1,
    "description": null,
    "name": "project1",
    "name_with_namespace": "John Doe2 / project1",
    "path": "project1",
    "path_with_namespace": "namespace1/project1",
    "created_at": "2020-05-07T04:27:17.016Z"
  }
}

プロジェクトのリポジトリストレージの移動を取得する

GET /projects/:project_id/repository_storage_moves/:repository_storage_id

パラメータは以下のとおりです:

属性必須説明
project_id整数はいプロジェクトのID
repository_storage_id整数はいプロジェクトリポジトリストレージの移動のID

リクエスト例:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/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",
  "project": {
    "id": 1,
    "description": null,
    "name": "project1",
    "name_with_namespace": "John Doe2 / project1",
    "path": "project1",
    "path_with_namespace": "namespace1/project1",
    "created_at": "2020-05-07T04:27:17.016Z"
  }
}

プロジェクトのリポジトリストレージの移動を作成する

POST /projects/:project_id/repository_storage_moves

パラメータは以下のとおりです:

属性必須説明
project_id整数はいプロジェクトのID
destination_storage_name文字列いいえ移行先ストレージのシャードの名前。指定されない場合、ストレージはストレージのウェイトに基づいて自動的に選択されます

リクエスト例:

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

レスポンス例:

{
  "id": 1,
  "created_at": "2020-05-07T04:27:17.234Z",
  "state": "scheduled",
  "source_storage_name": "default",
  "destination_storage_name": "storage2",
  "project": {
    "id": 1,
    "description": null,
    "name": "project1",
    "name_with_namespace": "John Doe2 / project1",
    "path": "project1",
    "path_with_namespace": "namespace1/project1",
    "created_at": "2020-05-07T04:27:17.016Z"
  }
}

ストレージのシャード上のすべてのプロジェクトのリポジトリストレージの移動を作成する

ソースストレージシャードに保存されている各プロジェクトリポジトリに対して、リポジトリストレージの移動を作成します。このエンドポイントは、すべてのプロジェクトを一括で移行します。

POST /project_repository_storage_moves

パラメータは以下のとおりです:

属性必須説明
source_storage_name文字列はいソースストレージのシャードの名前。
destination_storage_name文字列いいえ移行先ストレージのシャードの名前。指定されない場合、ストレージはストレージのウェイトに基づいて自動的に選択されます。

リクエスト例:

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

レスポンス例:

{
  "message": "202 Accepted"
}