Geo Nodes API

Geo Nodes API

为了与地理节点端点进行交互,您需要以管理员身份进行身份验证.

创建一个新的地理节点.

  1. --request POST \
  2. -d "name=himynameissomething" \
  3. -d "url=https://another-node.example.com/"

响应示例:

Retrieve configuration about all Geo nodes

  1. GET /geo_nodes
  1. 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://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

    响应示例:

    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" } }

    更新现有地理节点的设置.

    1. PUT /geo_nodes/:id

    响应示例:

    1. { "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 主节点将接受此请求.

    1. DELETE /geo_nodes/:id

    Repair a Geo node

    修复地理节点的 OAuth 身份验证.

    这只能在主要的地理节点上运行.

    1. POST /geo_nodes/:id/repair

    响应示例:

    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, "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" } }
    1. curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/geo_nodes/status"
    1. [ { "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_countrepositories_count被删除. 请改用projects_count .

    Retrieve status about a specific Geo node

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

    响应示例:

    1. { "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_countrepositories_count被删除. 请改用projects_count .

    Retrieve project sync or verification failures that occurred on the current node

    这仅适用于辅助节点.

    1. GET /geo_nodes/current/failures

    该端点使用分页 .