Geo sites API

Tier: 프리미엄, 얼티메이트 Offering: 셀프매니지드

Geo 사이트 API를 사용하여 Geo 사이트 엔드포인트를 관리합니다.

필수 조건:

  • 귀하는 관리자여야 합니다.

새 Geo 사이트 생성

새 Geo 사이트를 생성합니다.

POST /geo_sites
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/geo_sites" \
     --request POST \
     -d "name=himynameissomething" \
     -d "url=https://another-node.example.com/"
속성 유형 필수 설명
primary 부울 아니요 이 사이트가 주요해야 하는지 여부를 지정합니다. 기본값은 false입니다.
enabled 부울 아니요 Geo 사이트가 활성화되어 있는지를 나타내는 플래그입니다. 기본값은 true입니다.
name 문자열 Geo 사이트의 고유 식별자입니다. gitlab.rb에서 geo_node_name으로 설정되어 있다면 일치해야 하며, 그렇지 않은 경우 external_url과 일치해야 합니다.
url 문자열 Geo 사이트의 사용자용 URL입니다.
internal_url 문자열 아니요 이 사이트에서 기본 사이트로 연락해야 하는 URL입니다. 설정되어 있지 않으면 url을 반환합니다.
files_max_capacity 정수 아니요 이 보조 사이트에 대한 최대 LFS/첨부물 백필의 최대 동시성을 제어합니다. 기본값은 10입니다.
repos_max_capacity 정수 아니요 이 보조 사이트에 대한 저장소 백플의 최대 동시성을 제어합니다. 기본값은 25입니다.
verification_max_capacity 정수 아니요 이 사이트에 대한 저장소 확인의 최대 동시성을 제어합니다. 기본값은 100입니다.
container_repositories_max_capacity 정수 아니요 이 사이트에 대한 컨테이너 저장소 동기화의 최대 동시성을 제어합니다. 기본값은 10입니다.
sync_object_storage 부울 아니요 보조 Geo 사이트에서 오브젝트 스토리지의 블롭을 복제해야 하는지 여부를 나타내는 플래그입니다. 기본값은 false입니다.
selective_sync_type 문자열 아니요 특정 그룹이나 샤드에만 동기화하도록 제한합니다. 유효한 값은: "namespaces", "shards", 또는 null입니다.
selective_sync_shards 배열 아니요 selective_sync_type == shards인 경우 동기화되는 프로젝트의 저장소 저장소입니다.
차별화되는_sync_namespace_ids | 배열 | 아니요 | selective_sync_type == namespaces`인 경우 동기화되어야 하는 그룹의 ID입니다.      
차별화되는_reverification_interval` 정수 아니요 저장소 확인의 유효한 간격(일)입니다. 만료되면 재확인됩니다. 이는 보조 사이트에서 설정되어 있을 때 효과가 없습니다.

예시 응답:

{
  "id": 3,
  "name": "Test Site 1",
  "url": "https://secondary.example.com/",
  "internal_url": "https://secondary.example.com/",
  "primary": false,
  "enabled": true,
  "current": false,
  "files_max_capacity": 10,
  "repos_max_capacity": 25,
  "verification_max_capacity": 100,
  "container_repositories_max_capacity": 10,
  "selective_sync_type": "namespaces",
  "selective_sync_shards": [],
  "selective_sync_namespace_ids": [1, 25],
  "minimum_reverification_interval": 7,
  "sync_object_storage": false,
  "web_edit_url": "https://primary.example.com/admin/geo/sites/3/edit",
  "web_geo_replication_details_url": "https://secondary.example.com/admin/geo/sites/3/replication/lfs_objects",
  "_links": {
     "self": "https://primary.example.com/api/v4/geo_sites/3",
     "status": "https://primary.example.com/api/v4/geo_sites/3/status",
     "repair": "https://primary.example.com/api/v4/geo_sites/3/repair"
  }
}

모든 Geo 사이트에 대한 구성 검색

GET /geo_sites
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/geo_sites"

예시 응답:

[
  {
    "id": 1,
    "name": "us-site",
    "url": "https://primary.example.com/",
    "internal_url": "https://internal.example.com/",
    "primary": true,
    "enabled": true,
    "current": true,
    "files_max_capacity": 10,
    "repos_max_capacity": 25,
    "verification_max_capacity": 100,
    "container_repositories_max_capacity": 10,
    "selective_sync_type": "namespaces",
    "selective_sync_shards": [],
    "selective_sync_namespace_ids": [1, 25],
    "minimum_reverification_interval": 7,
    "web_edit_url": "https://primary.example.com/admin/geo/sites/1/edit",
    "_links": {
      "self": "https://primary.example.com/api/v4/geo_sites/1",
      "status":"https://primary.example.com/api/v4/geo_sites/1/status",
      "repair":"https://primary.example.com/api/v4/geo_sites/1/repair"
    }
  },
  {
    "id": 2,
    "name": "cn-site",
    "url": "https://secondary.example.com/",
    "internal_url": "https://secondary.example.com/",
    "primary": false,
    "enabled": true,
    "current": false,
    "files_max_capacity": 10,
    "repos_max_capacity": 25,
    "verification_max_capacity": 100,
    "container_repositories_max_capacity": 10,
    "selective_sync_type": "namespaces",
    "selective_sync_shards": [],
    "selective_sync_namespace_ids": [1, 25],
    "minimum_reverification_interval": 7,
    "sync_object_storage": true,
    "web_edit_url": "https://primary.example.com/admin/geo/sites/2/edit",
    "web_geo_replication_details_url": "https://secondary.example.com/admin/geo/sites/2/replication/lfs_objects",
    "_links": {
      "self":"https://primary.example.com/api/v4/geo_sites/2",
      "status":"https://primary.example.com/api/v4/geo_sites/2/status",
      "repair":"https://primary.example.com/api/v4/geo_sites/2/repair"
    }
  }
]

특정 지오 사이트에 대한 설정 검색

GET /geo_sites/:id
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/geo_sites/1"

예시 응답:

{
  "id": 1,
  "name": "us-site",
  "url": "https://primary.example.com/",
  "internal_url": "https://primary.example.com/",
  "primary": true,
  "enabled": true,
  "current": true,
  "files_max_capacity": 10,
  "repos_max_capacity": 25,
  "verification_max_capacity": 100,
  "container_repositories_max_capacity": 10,
  "selective_sync_type": "namespaces",
  "selective_sync_shards": [],
  "selective_sync_namespace_ids": [1, 25],
  "minimum_reverification_interval": 7,
  "web_edit_url": "https://primary.example.com/admin/geo/sites/1/edit",
  "_links": {
    "self": "https://primary.example.com/api/v4/geo_sites/1",
    "status":"https://primary.example.com/api/v4/geo_sites/1/status",
    "repair":"https://primary.example.com/api/v4/geo_sites/1/repair"
  }
}

지오 사이트 수정

기존 지오 사이트의 설정을 업데이트합니다.

PUT /geo_sites/:id
속성 유형 필수여부 설명
id integer 지오 사이트의 ID
enabled boolean 아니요 지오 사이트가 활성화된 경우 플래그를 지정합니다.
name string 아니요 지오 사이트를 위한 고유 식별자입니다. gitlab.rb에서 geo_node_name으로 설정된 경우에는 이에 일치해야 하며, 그렇지 않으면 external_url과 일치해야 합니다.
url string 아니요 사용자가 볼 수 있는 지오 사이트의 URL입니다.
internal_url string 아니요 보조 사이트가 연락할 때 사용하는 주(primary site)에서 정의된 URL입니다. 설정되어 있지 않으면 url이 반환됩니다.
files_max_capacity integer 아니요 이 보조 사이트의 LFS/첨부 파일 backfill의 최대 동시성을 제어합니다.
repos_max_capacity integer 아니요 이 보조 사이트의 저장소 backfill의 최대 동시성을 제어합니다.
verification_max_capacity integer 아니요 이 사이트에서 검증의 최대 동시성을 제어합니다.
container_repositories_max_capacity integer 아니요 이 사이트에서 컨테이너 저장소 동기화의 최대 동시성을 제어합니다.
selective_sync_type string 아니요 특정 그룹 또는 샤드에 대해 동기화를 제한합니다. 유효한 값: "namespaces", "shards", 또는 null.
selective_sync_shards array 아니요 selective_sync_typeshards인 경우 동기화되는 프로젝트의 저장소 저장소입니다.
selective_sync_namespace_ids array 아니요 selective_sync_typenamespaces인 경우에 동기화되어야 하는 그룹의 ID입니다.
minimum_reverification_interval integer 아니요 저장소 검증이 유효한 간격(일)입니다. 만료되면 다시 검증됩니다. 이는 보조 사이트에 설정된 경우 영향을 미치지 않습니다.

예시 응답:

{
  "id": 1,
  "name": "us-site",
  "url": "https://primary.example.com/",
  "internal_url": "https://internal.example.com/",
  "primary": true,
  "enabled": true,
  "current": true,
  "files_max_capacity": 10,
  "repos_max_capacity": 25,
  "verification_max_capacity": 100,
  "container_repositories_max_capacity": 10,
  "selective_sync_type": "namespaces",
  "selective_sync_shards": [],
  "selective_sync_namespace_ids": [1, 25],
  "minimum_reverification_interval": 7,
  "web_edit_url": "https://primary.example.com/admin/geo/sites/1/edit",
  "_links": {
    "self": "https://primary.example.com/api/v4/geo_sites/1",
    "status":"https://primary.example.com/api/v4/geo_sites/1/status",
    "repair":"https://primary.example.com/api/v4/geo_sites/1/repair"
  }
}

지오 사이트 삭제

지오 사이트를 제거합니다.

DELETE /geo_sites/:id
속성 유형 필수여부 설명
id integer 지오 사이트의 ID.

지오 사이트 수리

기본 또는 보조 지오 사이트 간에 OAuth 동기화 문제가 있는 경우, 해당 Geo 사이트의 OAuth 인증을 수리합니다. 그 경우, 다음 메시지가 표시될 수 있습니다:

이 Geo 노드에 대해 정의된 OAuth 애플리케이션이 없습니다.
POST /geo_sites/:id/repair

예시 응답:

{
  "id": 1,
  "name": "us-site",
  "url": "https://primary.example.com/",
  "internal_url": "https://primary.example.com/",
  "primary": true,
  "enabled": true,
  "current": true,
  "files_max_capacity": 10,
  "repos_max_capacity": 25,
  "verification_max_capacity": 100,
  "container_repositories_max_capacity": 10,
  "web_edit_url": "https://primary.example.com/admin/geo/sites/1/edit",
  "_links": {
    "self": "https://primary.example.com/api/v4/geo_sites/1",
    "status":"https://primary.example.com/api/v4/geo_sites/1/status",
    "repair":"https://primary.example.com/api/v4/geo_sites/1/repair"
  }
}
모든 Geo 사이트에 대한 상태 검색

GET /geo_sites/status
curl --header "PRIVATE-TOKEN: <당신의_액세스_토큰>" "https://primary.example.com/api/v4/geo_sites/status"

예시 응답:

[
  {
    "geo_node_id": 1,
    "projects_count": 19,
    "container_repositories_replication_enabled": null,
    "lfs_objects_count": 0,
    "lfs_objects_checksum_total_count": 0,
    "lfs_objects_checksummed_count": 0,
    "lfs_objects_checksum_failed_count": 0,
    (이하 생략)
  },
  {
    "geo_node_id": 2,
    "projects_count": 19,
    "container_repositories_replication_enabled": null,
    "lfs_objects_count": 0,
    "lfs_objects_checksum_total_count": null,
    "lfs_objects_checksummed_count": null,
    "lfs_objects_checksum_failed_count": null,
    (이하 생략)
  }
]

특정 Geo 사이트에 대한 상태 검색

GET /geo_sites/:id/status
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/geo_sites/2/status"

예시 응답:

  {
  "geo_node_id": 2,
  "projects_count": 19,
  "container_repositories_replication_enabled": null,
  "lfs_objects_count": 0,
  "lfs_objects_checksum_total_count": null,
  "lfs_objects_checksummed_count": null,
  "lfs_objects_checksum_failed_count": null,
  "lfs_objects_synced_count": 0,
  "lfs_objects_failed_count": 0,
  "lfs_objects_registry_count": 0,
  "lfs_objects_verification_total_count": 0,
  "lfs_objects_verified_count": 0,
  "lfs_objects_verification_failed_count": 0,
  "merge_request_diffs_count": 0,
  "merge_request_diffs_checksum_total_count": null,
  "merge_request_diffs_checksummed_count": null,
  "merge_request_diffs_checksum_failed_count": null,
  "merge_request_diffs_synced_count": 0,
  "merge_request_diffs_failed_count": 0,
  "merge_request_diffs_registry_count": 0,
  "merge_request_diffs_verification_total_count": 0,
  "merge_request_diffs_verified_count": 0,
  "merge_request_diffs_verification_failed_count": 0,
  "package_files_count": 25,
  "package_files_checksum_total_count": null,
  "package_files_checksummed_count": null,
  "package_files_checksum_failed_count": null,
  "package_files_synced_count": 1,
  "package_files_failed_count": 24,
  "package_files_registry_count": 25,
  "package_files_verification_total_count": 1,
  "package_files_verified_count": 1,
  "package_files_verification_failed_count": 0,
  "terraform_state_versions_count": 18,
  "terraform_state_versions_checksum_total_count": null,
  "terraform_state_versions_checksummed_count": null,
  "terraform_state_versions_checksum_failed_count": null,
  "terraform_state_versions_synced_count": 0,
  "terraform_state_versions_failed_count": 0,
  "terraform_state_versions_registry_count": 18,
  "terraform_state_versions_verification_total_count": 0,
  "terraform_state_versions_verified_count": 0,
  "terraform_state_versions_verification_failed_count": 0,
  "snippet_repositories_count": 20,
  "snippet_repositories_checksum_total_count": null,
  "snippet_repositories_checksummed_count": null,
  "snippet_repositories_checksum_failed_count": null,
  "snippet_repositories_synced_count": 20,
  "snippet_repositories_failed_count": 0,
  "snippet_repositories_registry_count": 20,
  "snippet_repositories_verification_total_count": 20,
  "snippet_repositories_verified_count": 20,
  "snippet_repositories_verification_failed_count": 0,
  "group_wiki_repositories_count": 0,
  "group_wiki_repositories_checksum_total_count": null,
  "group_wiki_repositories_checksummed_count": null,
  "group_wiki_repositories_checksum_failed_count": null,
  "group_wiki_repositories_synced_count": 0,
  "group_wiki_repositories_failed_count": 0,
  "group_wiki_repositories_registry_count": 0,
  "group_wiki_repositories_verification_total_count": null,
  "group_wiki_repositories_verified_count": null,
  "group_wiki_repositories_verification_failed_count": null,
  "pipeline_artifacts_count": 0,
  "pipeline_artifacts_checksum_total_count": null,
  "pipeline_artifacts_checksummed_count": null,
  "pipeline_artifacts_checksum_failed_count": null,
  "pipeline_artifacts_synced_count": 0,
  "pipeline_artifacts_failed_count": 0,
  "pipeline_artifacts_registry_count": 0,
  "pipeline_artifacts_verification_total_count": 0,
  "pipeline_artifacts_verified_count": 0,
  "pipeline_artifacts_verification_failed_count": 0,
  "pages_deployments_count": 0,
  "pages_deployments_checksum_total_count": null,
  "pages_deployments_checksummed_count": null,
  "pages_deployments_checksum_failed_count": null,
  "pages_deployments_synced_count": 0,
  "pages_deployments_failed_count": 0,
  "pages_deployments_registry_count": 0,
  "pages_deployments_verification_total_count": 0,
  "pages_deployments_verified_count": 0,
  "pages_deployments_verification_failed_count": 0,
  "uploads_count": 51,
  "uploads_checksum_total_count": null,
  "uploads_checksummed_count": null,
  "uploads_checksum_failed_count": null,
  "uploads_synced_count": 0,
  "uploads_failed_count": 1,
  "uploads_registry_count": 51,
  "uploads_verification_total_count": 0,
  "uploads_verified_count": 0,
  "uploads_verification_failed_count": 0,
  "job_artifacts_count": 0,
  "job_artifacts_checksum_total_count": null,
  "job_artifacts_checksummed_count": null,
  "job_artifacts_checksum_failed_count": null,
  "job_artifacts_synced_count": 0,
  "job_artifacts_failed_count": 0,
  "job_artifacts_registry_count": 0,
  "job_artifacts_verification_total_count": 0,
  "job_artifacts_verified_count": 0,
  "job_artifacts_verification_failed_count": 0,
  "ci_secure_files_count": 0,
  "ci_secure_files_checksum_total_count": null,
  "ci_secure_files_checksummed_count": null,
  "ci_secure_files_checksum_failed_count": null,
  "ci_secure_files_synced_count": 0,
  "ci_secure_files_failed_count": 0,
  "ci_secure_files_registry_count": 0,
  "ci_secure_files_verification_total_count": 0,
  "ci_secure_files_verified_count": 0,
  "ci_secure_files_verification_failed_count": 0,
  "container_repositories_count": null,
  "container_repositories_checksum_total_count": null,
  "container_repositories_checksummed_count": null,
  "container_repositories_checksum_failed_count": null,
  "container_repositories_synced_count": null,
  "container_repositories_failed_count": null,
  "container_repositories_registry_count": null,
  "container_repositories_verification_total_count": null,
  "container_repositories_verified_count": null,
  "container_repositories_verification_failed_count": null,
  "dependency_proxy_blobs_count": 0,
  "dependency_proxy_blobs_checksum_total_count": null,
  "dependency_proxy_blobs_checksummed_count": null,
  "dependency_proxy_blobs_checksum_failed_count": null,
  "dependency_proxy_blobs_synced_count": 0,
  "dependency_proxy_blobs_failed_count": 0,
  "dependency_proxy_blobs_registry_count": 0,
  "dependency_proxy_blobs_verification_total_count": 0,
  "dependency_proxy_blobs_verified_count": 0,
  "dependency_proxy_blobs_verification_failed_count": 0,
  "dependency_proxy_manifests_count": 0,
  "dependency_proxy_manifests_checksum_total_count": null,
  "dependency_proxy_manifests_checksummed_count": null,
  "dependency_proxy_manifests_checksum_failed_count": null,
  "dependency_proxy_manifests_synced_count": 0,
  "dependency_proxy_manifests_failed_count": 0,
  "dependency_proxy_manifests_registry_count": 0,
  "dependency_proxy_manifests_verification_total_count": 0,
  "dependency_proxy_manifests_verified_count": 0,
  "dependency_proxy_manifests_verification_failed_count": 0,
  "project_wiki_repositories_count": 19,
  "project_wiki_repositories_checksum_total_count": null,
  "project_wiki_repositories_checksummed_count": null,
  "project_wiki_repositories_checksum_failed_count": null,
  "project_wiki_repositories_synced_count": 19,
  "project_wiki_repositories_failed_count": 0,
  "project_wiki_repositories_registry_count": 19,
  "project_wiki_repositories_verification_total_count": 19,
  "project_wiki_repositories_verified_count": 19,
  "project_wiki_repositories_verification_failed_count": 0,
  "git_fetch_event_count_weekly": null,
  "git_push_event_count_weekly": null,
  "proxy_remote_requests_event_count_weekly": null,
  "proxy_local_requests_event_count_weekly": null,
  "repositories_checked_in_percentage": "0.00%",
  "replication_slots_used_in_percentage": "0.00%",
  "lfs_objects_synced_in_percentage": "0.00%",
  "lfs_objects_verified_in_percentage": "0.00%",
  "merge_request_diffs_synced_in_percentage": "0.00%",
  "merge_request_diffs_verified_in_percentage": "0.00%",
  "package_files_synced_in_percentage": "4.00%",
  "package_files_verified_in_percentage": "4.00%",
  "terraform_state_versions_synced_in_percentage": "0.00%",
  "terraform_state_versions_verified_in_percentage": "0.00%",
  "snippet_repositories_synced_in_percentage": "100.00%",
  "snippet_repositories_verified_in_percentage": "100.00%",
  "group_wiki_repositories_synced_in_percentage": "0.00%",
  "group_wiki_repositories_verified_in_percentage": "0.00%",
  "pipeline_artifacts_synced_in_percentage": "0.00%",
  "pipeline_artifacts_verified_in_percentage": "0.00%",
  "pages_deployments_synced_in_percentage": "0.00%",
  "pages_deployments_verified_in_percentage": "0.00%",
  "uploads_synced_in_percentage": "0.00%",
  "uploads_verified_in_percentage": "0.00%",
  "job_artifacts_synced_in_percentage": "0.00%",
  "job_artifacts_verified_in_percentage": "0.00%",
  "ci_secure_files_synced_in_percentage": "0.00%",
  "ci_secure_files_verified_in_percentage": "0.00%",
  "container_repositories_synced_in_percentage": "0.00%",
  "container_repositories_verified_in_percentage": "0.00%",
  "dependency_proxy_blobs_synced_in_percentage": "0.00%",
  "dependency_proxy_blobs_verified_in_percentage": "0.00%",
  "dependency_proxy_manifests_synced_in_percentage": "0.00%",
  "dependency_proxy_manifests_verified_in_percentage": "0.00%",
  "project_wiki_repositories_synced_in_percentage": "100.00%",
  "project_wiki_repositories_verified_in_percentage": "100.00%",
  "repositories_count": 19,
  "replication_slots_count": null,
  "replication_slots_used_count": null,
  "healthy": false,
  "health": "An existing tracking database cannot be reused..",
  "health_status": "Unhealthy",
  "missing_oauth_application": false,
  "db_replication_lag_seconds": 0,
  "replication_slots_max_retained_wal_bytes": null,
  "repositories_checked_count": null,
  "repositories_checked_failed_count": null,
  "last_event_id": 357,
  "last_event_timestamp": 1683127088,
  "cursor_last_event_id": 357,
  "cursor_last_event_timestamp": 1683127088,
  "last_successful_status_check_timestamp": 1683127146,
  "version": "16.0.0-pre",
  "revision": "129eb954664",
  "selective_sync_type": "",
  "namespaces": [],
  "updated_at": "2023-05-03T15:19:06.174Z",
  "storage_shards_match": true,
  "_links": {
    "self": "https://primary.example.com/api/v4/geo_sites/2/status",
    "site": "https://primary.example.com/api/v4/geo_sites/2"
  }
}

참고: health_status 매개변수는 “Healthy” 또는 “Unhealthy” 상태만 가질 수 있으며, health 매개변수는 비어 있거나 “Healthy”이거나 실제 오류 메시지를 포함할 수 있습니다.