diff options
author | Alex Auvolat <lx@deuxfleurs.fr> | 2025-01-30 13:36:25 +0100 |
---|---|---|
committer | Alex Auvolat <lx@deuxfleurs.fr> | 2025-01-30 13:36:25 +0100 |
commit | f37d5d2b08b008eba7b1ee8d84b08d5fddeabf78 (patch) | |
tree | 453085c608fc35687f5207bffc2fc5a007d918e2 /src/api | |
parent | 819f4f00509a57097d0ee8291e1556829e982e14 (diff) | |
download | garage-f37d5d2b08b008eba7b1ee8d84b08d5fddeabf78.tar.gz garage-f37d5d2b08b008eba7b1ee8d84b08d5fddeabf78.zip |
admin api: convert most bucket operations
Diffstat (limited to 'src/api')
-rw-r--r-- | src/api/admin/api.rs | 1 | ||||
-rw-r--r-- | src/api/admin/bucket.rs | 14 | ||||
-rw-r--r-- | src/api/admin/router_v2.rs | 3 |
3 files changed, 13 insertions, 5 deletions
diff --git a/src/api/admin/api.rs b/src/api/admin/api.rs index 52ecd501..21133f10 100644 --- a/src/api/admin/api.rs +++ b/src/api/admin/api.rs @@ -395,6 +395,7 @@ pub struct BucketLocalAlias { pub struct GetBucketInfoRequest { pub id: Option<String>, pub global_alias: Option<String>, + pub search: Option<String>, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/src/api/admin/bucket.rs b/src/api/admin/bucket.rs index 0cc420ec..d2d75fc0 100644 --- a/src/api/admin/bucket.rs +++ b/src/api/admin/bucket.rs @@ -73,16 +73,22 @@ impl EndpointHandler for GetBucketInfoRequest { type Response = GetBucketInfoResponse; async fn handle(self, garage: &Arc<Garage>) -> Result<GetBucketInfoResponse, Error> { - let bucket_id = match (self.id, self.global_alias) { - (Some(id), None) => parse_bucket_id(&id)?, - (None, Some(ga)) => garage + let bucket_id = match (self.id, self.global_alias, self.search) { + (Some(id), None, None) => parse_bucket_id(&id)?, + (None, Some(ga), None) => garage .bucket_helper() .resolve_global_bucket_name(&ga) .await? .ok_or_else(|| HelperError::NoSuchBucket(ga.to_string()))?, + (None, None, Some(search)) => { + garage + .bucket_helper() + .admin_get_existing_matching_bucket(&search) + .await? + } _ => { return Err(Error::bad_request( - "Either id or globalAlias must be provided (but not both)", + "Either id, globalAlias or search must be provided (but not several of them)", )); } }; diff --git a/src/api/admin/router_v2.rs b/src/api/admin/router_v2.rs index 29250f39..9d60b312 100644 --- a/src/api/admin/router_v2.rs +++ b/src/api/admin/router_v2.rs @@ -46,7 +46,7 @@ impl AdminApiRequest { POST DeleteKey (query::id), GET ListKeys (), // Bucket endpoints - GET GetBucketInfo (query_opt::id, query_opt::global_alias), + GET GetBucketInfo (query_opt::id, query_opt::global_alias, query_opt::search), GET ListBuckets (), POST CreateBucket (body), POST DeleteBucket (query::id), @@ -141,6 +141,7 @@ impl AdminApiRequest { Ok(AdminApiRequest::GetBucketInfo(GetBucketInfoRequest { id, global_alias, + search: None, })) } Endpoint::CreateBucket => { |