Geo Nodes API
- Geo Nodes API
- Create a new Geo node
 - Retrieve configuration about all Geo nodes
 - Retrieve configuration about a specific Geo node
 - Edit a Geo node
 - Delete a Geo node
 - Repair a Geo node
 - Retrieve status about all Geo nodes
 - Retrieve status about a specific Geo node
 - Retrieve project sync or verification failures that occurred on the current node
 
 
- Create a new Geo node
 - Retrieve configuration about all Geo nodes
 - Retrieve configuration about a specific Geo node
 - Edit a Geo node
 - Delete a Geo node
 - Repair a Geo node
 - Retrieve status about all Geo nodes
 - Retrieve status about a specific Geo node
 - Retrieve project sync or verification failures that occurred on the current node
 
Geo Nodes API
为了与地理节点端点进行交互,您需要以管理员身份进行身份验证.
Create a new Geo node
创建一个新的地理节点.
POST /geo_nodes 
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/geo_nodes" \
     --request POST \
     -d "name=himynameissomething" \
     -d "url=https://another-node.example.com/" 
| Attribute | Type | Required | Description | 
|---|---|---|---|
 primary  | 
boolean | no | 指定此节点是否为主节点. 默认为 false. | 
 enabled  | 
boolean | no | 指示是否启用地理节点的标志. 默认为 true. | 
 name  | 
string | yes |  地理节点的唯一标识符. 必须匹配geo_node_name如果在设定gitlab.rb ,否则必须匹配external_url  | 
 url  | 
string | yes | Geo 节点的面向用户的 URL. | 
 internal_url  | 
string | no |  在主节点上定义的 URL,辅助节点应使用该 URL 与之联系. 如果未设置,则返回url .  | 
 files_max_capacity  | 
integer | no | 控制此辅助节点的 LFS /附件回填的最大并发性. 默认为 10 | 
 repos_max_capacity  | 
integer | no | 控制此辅助节点的存储库回填的最大并发性. 默认为 25. | 
 verification_max_capacity  | 
integer | no | 控制此节点的存储库验证的最大并发性. 默认为 100. | 
 container_repositories_max_capacity  | 
integer | no | 控制此节点的容器存储库同步的最大并发性. 默认为 10 | 
 sync_object_storage  | 
boolean | no | 指示辅助 Geo 节点是否将复制对象存储中的 Blob 的标志. 默认为 false. | 
 selective_sync_type  | 
string | no |  Limit syncing to only specific groups or shards. Valid values: "namespaces", "shards", or null.  | 
 selective_sync_shards  | 
array | no |  如果selective_sync_type == shards ,则同步项目的存储库存储.  | 
 selective_sync_namespace_ids  | 
array | no |  如果selective_sync_type == namespaces ,则应同步的组的 ID.  | 
 minimum_reverification_interval  | 
integer | no | 存储库验证有效的时间间隔(以天为单位). 一旦过期,它将被重新验证. 在辅助节点上进行设置时,这无效. | 
响应示例:
{  "id":  3,  "name":  "Test Node 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,  "selective_sync_type":  "namespaces",  "selective_sync_shards":  [],  "selective_sync_namespace_ids":  [1,  25],  "minimum_reverification_interval":  7,  "container_repositories_max_capacity":  10,  "sync_object_storage":  false,  "clone_protocol":  "http",  "web_edit_url":  "https://primary.example.com/admin/geo/nodes/3/edit",  "web_geo_projects_url":  "http://secondary.example.com/admin/geo/projects",  "_links":  {  "self":  "https://primary.example.com/api/v4/geo_nodes/3",  "status":  "https://primary.example.com/api/v4/geo_nodes/3/status",  "repair":  "https://primary.example.com/api/v4/geo_nodes/3/repair"  }  } 
Retrieve configuration about all Geo nodes
GET /geo_nodes 
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/geo_nodes" 
响应示例:
[  {  "id":  1,  "name":  "us-node",  "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,  "container_repositories_max_capacity":  10,  "verification_max_capacity":  100,  "selective_sync_type":  "namespaces",  "selective_sync_shards":  [],  "selective_sync_namespace_ids":  [1,  25],  "minimum_reverification_interval":  7,  "clone_protocol":  "http",  "web_edit_url":  "https://primary.example.com/admin/geo/nodes/1/edit",  "_links":  {  "self":  "https://primary.example.com/api/v4/geo_nodes/1",  "status":"https://primary.example.com/api/v4/geo_nodes/1/status",  "repair":"https://primary.example.com/api/v4/geo_nodes/1/repair"  }  },  {  "id":  2,  "name":  "cn-node",  "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,  "container_repositories_max_capacity":  10,  "verification_max_capacity":  100,  "selective_sync_type":  "namespaces",  "selective_sync_shards":  [],  "selective_sync_namespace_ids":  [1,  25],  "minimum_reverification_interval":  7,  "sync_object_storage":  true,  "clone_protocol":  "http",  "web_edit_url":  "https://primary.example.com/admin/geo/nodes/2/edit",  "web_geo_projects_url":  "https://secondary.example.com/admin/geo/projects",  "_links":  {  "self":"https://primary.example.com/api/v4/geo_nodes/2",  "status":"https://primary.example.com/api/v4/geo_nodes/2/status",  "repair":"https://primary.example.com/api/v4/geo_nodes/2/repair"  }  }  ] 
Retrieve configuration about a specific Geo node
GET /geo_nodes/:id 
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/geo_nodes/1" 
响应示例:
{  "id":  1,  "name":  "us-node",  "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,  "container_repositories_max_capacity":  10,  "verification_max_capacity":  100,  "selective_sync_type":  "namespaces",  "selective_sync_shards":  [],  "selective_sync_namespace_ids":  [1,  25],  "minimum_reverification_interval":  7,  "clone_protocol":  "http",  "web_edit_url":  "https://primary.example.com/admin/geo/nodes/1/edit",  "_links":  {  "self":  "https://primary.example.com/api/v4/geo_nodes/1",  "status":"https://primary.example.com/api/v4/geo_nodes/1/status",  "repair":"https://primary.example.com/api/v4/geo_nodes/1/repair"  }  } 
Edit a Geo node
更新现有地理节点的设置.
这只能在主要的地理节点上运行.
PUT /geo_nodes/:id 
| Attribute | Type | Required | Description | 
|---|---|---|---|
 id  | 
integer | yes | 地理位置节点的 ID. | 
 enabled  | 
boolean | no | 指示是否启用地理节点的标志. | 
 name  | 
string | yes |  地理节点的唯一标识符. 必须匹配geo_node_name如果在设定gitlab.rb ,否则必须匹配external_url .  | 
 url  | 
string | yes | Geo 节点的面向用户的 URL. | 
 internal_url  | 
string | no |  在主节点上定义的 URL,辅助节点应使用该 URL 与之联系. 如果未设置,则返回url .  | 
 files_max_capacity  | 
integer | no | 控制此辅助节点的 LFS /附件回填的最大并发性. | 
 repos_max_capacity  | 
integer | no | 控制此辅助节点的存储库回填的最大并发性. | 
 verification_max_capacity  | 
integer | no | 控制此节点的最大并发验证. | 
 container_repositories_max_capacity  | 
integer | no | 控制此节点的容器存储库同步的最大并发性. | 
 sync_object_storage  | 
boolean | no | 指示辅助 Geo 节点是否将复制对象存储中的 Blob 的标志. | 
 selective_sync_type  | 
string | no |  将同步限制为仅特定的组或碎片. 有效值: "namespaces" , "shards"或null .  | 
 selective_sync_shards  | 
array | no |  如果selective_sync_type == shards ,则同步项目的存储库存储.  | 
 selective_sync_namespace_ids  | 
array | no |  如果selective_sync_type == namespaces ,则应同步的组的 ID.  | 
 minimum_reverification_interval  | 
integer | no | 存储库验证有效的时间间隔(以天为单位). 一旦过期,它将被重新验证. 在辅助节点上进行设置时,这无效. | 
响应示例:
{  "id":  1,  "name":  "cn-node",  "url":  "https://secondary.example.com/",  "internal_url":  "https://secondary.example.com/",  "primary":  false,  "enabled":  true,  "current":  true,  "files_max_capacity":  10,  "repos_max_capacity":  25,  "container_repositories_max_capacity":  10,  "verification_max_capacity":  100,  "selective_sync_type":  "namespaces",  "selective_sync_shards":  [],  "selective_sync_namespace_ids":  [1,  25],  "minimum_reverification_interval":  7,  "sync_object_storage":  true,  "clone_protocol":  "http",  "web_edit_url":  "https://primary.example.com/admin/geo/nodes/2/edit",  "web_geo_projects_url":  "https://secondary.example.com/admin/geo/projects",  "_links":  {  "self":"https://primary.example.com/api/v4/geo_nodes/2",  "status":"https://primary.example.com/api/v4/geo_nodes/2/status",  "repair":"https://primary.example.com/api/v4/geo_nodes/2/repair"  }  } 
Delete a Geo node
删除地理节点.
注意:只有 Geo 主节点将接受此请求.
DELETE /geo_nodes/:id 
| Attribute | Type | Required | Description | 
|---|---|---|---|
 id  | 
integer | yes | 地理位置节点的 ID. | 
Repair a Geo node
修复地理节点的 OAuth 身份验证.
这只能在主要的地理节点上运行.
POST /geo_nodes/:id/repair 
响应示例:
{  "id":  1,  "name":  "us-node",  "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,  "container_repositories_max_capacity":  10,  "verification_max_capacity":  100,  "clone_protocol":  "http",  "web_edit_url":  "https://primary.example.com/admin/geo/nodes/1/edit",  "_links":  {  "self":  "https://primary.example.com/api/v4/geo_nodes/1",  "status":"https://primary.example.com/api/v4/geo_nodes/1/status",  "repair":"https://primary.example.com/api/v4/geo_nodes/1/repair"  }  } 
Retrieve status about all Geo nodes
GET /geo_nodes/status 
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/geo_nodes/status" 
响应示例:
[  {  "geo_node_id":  1,  "healthy":  true,  "health":  "Healthy",  "health_status":  "Healthy",  "missing_oauth_application":  false,  "attachments_count":  1,  "attachments_synced_count":  nil,  "attachments_failed_count":  nil,  "attachments_synced_missing_on_primary_count":  0,  "attachments_synced_in_percentage":  "0.00%",  "db_replication_lag_seconds":  nil,  "lfs_objects_count":  0,  "lfs_objects_synced_count":  nil,  "lfs_objects_failed_count":  nil,  "lfs_objects_synced_missing_on_primary_count":  0,  "lfs_objects_synced_in_percentage":  "0.00%",  "job_artifacts_count":  2,  "job_artifacts_synced_count":  nil,  "job_artifacts_failed_count":  nil,  "job_artifacts_synced_missing_on_primary_count":  0,  "job_artifacts_synced_in_percentage":  "0.00%",  "container_repositories_count":  3,  "container_repositories_synced_count":  nil,  "container_repositories_failed_count":  nil,  "container_repositories_synced_in_percentage":  "0.00%",  "design_repositories_count":  3,  "design_repositories_synced_count":  nil,  "design_repositories_failed_count":  nil,  "design_repositories_synced_in_percentage":  "0.00%",  "projects_count":  41,  "repositories_failed_count":  nil,  "repositories_synced_count":  nil,  "repositories_synced_in_percentage":  "0.00%",  "wikis_failed_count":  nil,  "wikis_synced_count":  nil,  "wikis_synced_in_percentage":  "0.00%",  "replication_slots_count":  1,  "replication_slots_used_count":  1,  "replication_slots_used_in_percentage":  "100.00%",  "replication_slots_max_retained_wal_bytes":  0,  "repositories_checked_count":  20,  "repositories_checked_failed_count":  20,  "repositories_checked_in_percentage":  "100.00%",  "repositories_checksummed_count":  20,  "repositories_checksum_failed_count":  5,  "repositories_checksummed_in_percentage":  "48.78%",  "wikis_checksummed_count":  10,  "wikis_checksum_failed_count":  3,  "wikis_checksummed_in_percentage":  "24.39%",  "repositories_verified_count":  20,  "repositories_verification_failed_count":  5,  "repositories_verified_in_percentage":  "48.78%",  "repositories_checksum_mismatch_count":  3,  "wikis_verified_count":  10,  "wikis_verification_failed_count":  3,  "wikis_verified_in_percentage":  "24.39%",  "wikis_checksum_mismatch_count":  1,  "repositories_retrying_verification_count":  1,  "wikis_retrying_verification_count":  3,  "repositories_checked_count":  7,  "repositories_checked_failed_count":  2,  "repositories_checked_in_percentage":  "17.07%",  "last_event_id":  23,  "last_event_timestamp":  1509681166,  "cursor_last_event_id":  nil,  "cursor_last_event_timestamp":  0,  "last_successful_status_check_timestamp":  1510125024,  "version":  "10.3.0",  "revision":  "33d33a096a",  "package_files_count":  10,  "package_files_checksummed_count":  10,  "package_files_checksum_failed_count":  0,  "package_files_registry_count":  10,  "package_files_synced_count":  6,  "package_files_failed_count":  3  },  {  "geo_node_id":  2,  "healthy":  true,  "health":  "Healthy",  "health_status":  "Healthy",  "missing_oauth_application":  false,  "attachments_count":  1,  "attachments_synced_count":  1,  "attachments_failed_count":  0,  "attachments_synced_missing_on_primary_count":  0,  "attachments_synced_in_percentage":  "100.00%",  "db_replication_lag_seconds":  0,  "lfs_objects_count":  0,  "lfs_objects_synced_count":  0,  "lfs_objects_failed_count":  0,  "lfs_objects_synced_missing_on_primary_count":  0,  "lfs_objects_synced_in_percentage":  "0.00%",  "job_artifacts_count":  2,  "job_artifacts_synced_count":  1,  "job_artifacts_failed_count":  1,  "job_artifacts_synced_missing_on_primary_count":  0,  "job_artifacts_synced_in_percentage":  "50.00%",  "container_repositories_count":  3,  "container_repositories_synced_count":  nil,  "container_repositories_failed_count":  nil,  "container_repositories_synced_in_percentage":  "0.00%",  "design_repositories_count":  3,  "design_repositories_synced_count":  nil,  "design_repositories_failed_count":  nil,  "design_repositories_synced_in_percentage":  "0.00%",  "projects_count":  41,  "repositories_failed_count":  1,  "repositories_synced_count":  40,  "repositories_synced_in_percentage":  "97.56%",  "wikis_failed_count":  0,  "wikis_synced_count":  41,  "wikis_synced_in_percentage":  "100.00%",  "replication_slots_count":  nil,  "replication_slots_used_count":  nil,  "replication_slots_used_in_percentage":  "0.00%",  "replication_slots_max_retained_wal_bytes":  nil,  "repositories_checksummed_count":  20,  "repositories_checksum_failed_count":  5,  "repositories_checksummed_in_percentage":  "48.78%",  "wikis_checksummed_count":  10,  "wikis_checksum_failed_count":  3,  "wikis_checksummed_in_percentage":  "24.39%",  "repositories_verified_count":  20,  "repositories_verification_failed_count":  5,  "repositories_verified_in_percentage":  "48.78%",  "repositories_checksum_mismatch_count":  3,  "wikis_verified_count":  10,  "wikis_verification_failed_count":  3,  "wikis_verified_in_percentage":  "24.39%",  "wikis_checksum_mismatch_count":  1,  "repositories_retrying_verification_count":  4,  "wikis_retrying_verification_count":  2,  "repositories_checked_count":  5,  "repositories_checked_failed_count":  1,  "repositories_checked_in_percentage":  "12.20%",  "last_event_id":  23,  "last_event_timestamp":  1509681166,  "cursor_last_event_id":  23,  "cursor_last_event_timestamp":  1509681166,  "last_successful_status_check_timestamp":  1510125024,  "version":  "10.3.0",  "revision":  "33d33a096a",  "package_files_count":  10,  "package_files_checksummed_count":  10,  "package_files_checksum_failed_count":  0,  "package_files_registry_count":  10,  "package_files_synced_count":  6,  "package_files_failed_count":  3  }  ] 
注意:在 GitLab 12.0 中,已弃用的字段wikis_count和repositories_count被删除. 请改用projects_count .
Retrieve status about a specific Geo node
GET /geo_nodes/:id/status 
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/geo_nodes/2/status" 
响应示例:
{  "geo_node_id":  2,  "healthy":  true,  "health":  "Healthy",  "health_status":  "Healthy",  "missing_oauth_application":  false,  "attachments_count":  1,  "attachments_synced_count":  1,  "attachments_failed_count":  0,  "attachments_synced_missing_on_primary_count":  0,  "attachments_synced_in_percentage":  "100.00%",  "db_replication_lag_seconds":  0,  "lfs_objects_count":  0,  "lfs_objects_synced_count":  0,  "lfs_objects_failed_count":  0,  "lfs_objects_synced_missing_on_primary_count":  0,  "lfs_objects_synced_in_percentage":  "0.00%",  "job_artifacts_count":  2,  "job_artifacts_synced_count":  1,  "job_artifacts_failed_count":  1,  "job_artifacts_synced_missing_on_primary_count":  0,  "job_artifacts_synced_in_percentage":  "50.00%",  "container_repositories_count":  3,  "container_repositories_synced_count":  nil,  "container_repositories_failed_count":  nil,  "container_repositories_synced_in_percentage":  "0.00%",  "design_repositories_count":  3,  "design_repositories_synced_count":  nil,  "design_repositories_failed_count":  nil,  "design_repositories_synced_in_percentage":  "0.00%",  "projects_count":  41,  "repositories_failed_count":  1,  "repositories_synced_count":  40,  "repositories_synced_in_percentage":  "97.56%",  "wikis_failed_count":  0,  "wikis_synced_count":  41,  "wikis_synced_in_percentage":  "100.00%",  "replication_slots_count":  nil,  "replication_slots_used_count":  nil,  "replication_slots_used_in_percentage":  "0.00%",  "replication_slots_max_retained_wal_bytes":  nil,  "last_event_id":  23,  "last_event_timestamp":  1509681166,  "cursor_last_event_id":  23,  "cursor_last_event_timestamp":  1509681166,  "last_successful_status_check_timestamp":  1510125268,  "version":  "10.3.0",  "revision":  "33d33a096a"  } 
注意: health_status参数只能处于"健康"或"不健康"状态,而health参数可以为空,"健康"或包含实际错误消息.
注意:在 GitLab 12.0 中,已弃用的字段wikis_count和repositories_count被删除. 请改用projects_count .
Retrieve project sync or verification failures that occurred on the current node
这仅适用于辅助节点.
GET /geo_nodes/current/failures 
| Attribute | Type | Required | Description | 
|---|---|---|---|
 type  | 
string | no |  失败对象的类型( repository / wiki )  | 
 failure_type  | 
string | no |  故障类型( sync / checksum_mismatch / verification ) | 
该端点使用分页 .
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/geo_nodes/current/failures" 
响应示例:
[  {  "project_id":  3,  "last_repository_synced_at":  "2017-10-31 14:25:55 UTC",  "last_repository_successful_sync_at":  "2017-10-31 14:26:04 UTC",  "last_wiki_synced_at":  "2017-10-31 14:26:04 UTC",  "last_wiki_successful_sync_at":  "2017-10-31 14:26:11 UTC",  "repository_retry_count":  null,  "wiki_retry_count":  1,  "last_repository_sync_failure":  null,  "last_wiki_sync_failure":  "Error syncing Wiki repository",  "last_repository_verification_failure":  "",  "last_wiki_verification_failure":  "",  "repository_verification_checksum_sha":  "da39a3ee5e6b4b0d32e5bfef9a601890afd80709",  "wiki_verification_checksum_sha":  "da39a3ee5e6b4b0d3255bfef9ef0189aafd80709",  "repository_checksum_mismatch":  false,  "wiki_checksum_mismatch":  false  }  ]