diff options
author | Alex Auvolat <lx@deuxfleurs.fr> | 2025-01-28 16:18:48 +0100 |
---|---|---|
committer | Alex Auvolat <lx@deuxfleurs.fr> | 2025-01-29 19:26:16 +0100 |
commit | ed58f8b0fe3c44eac7416b3aaa444d1b568f8918 (patch) | |
tree | 3f4d85fe745ebb7ce257348828c5dfc4f28a3285 /src | |
parent | 5037b97dd41cb668289708384c13006f5db2afd7 (diff) | |
download | garage-ed58f8b0fe3c44eac7416b3aaa444d1b568f8918.tar.gz garage-ed58f8b0fe3c44eac7416b3aaa444d1b568f8918.zip |
admin api: update semantics of some endpoints, and update doc
Diffstat (limited to 'src')
-rw-r--r-- | src/api/admin/api.rs | 12 | ||||
-rw-r--r-- | src/api/admin/api_server.rs | 4 | ||||
-rw-r--r-- | src/api/admin/bucket.rs | 8 | ||||
-rw-r--r-- | src/api/admin/macros.rs | 2 | ||||
-rw-r--r-- | src/api/admin/router_v2.rs | 44 |
5 files changed, 44 insertions, 26 deletions
diff --git a/src/api/admin/api.rs b/src/api/admin/api.rs index c8fad95b..457863e0 100644 --- a/src/api/admin/api.rs +++ b/src/api/admin/api.rs @@ -500,8 +500,9 @@ pub struct BucketDenyKeyResponse(pub GetBucketInfoResponse); // ---- GlobalAliasBucket ---- +#[derive(Deserialize)] pub struct GlobalAliasBucketRequest { - pub id: String, + pub bucket_id: String, pub alias: String, } @@ -510,8 +511,9 @@ pub struct GlobalAliasBucketResponse(pub GetBucketInfoResponse); // ---- GlobalUnaliasBucket ---- +#[derive(Deserialize)] pub struct GlobalUnaliasBucketRequest { - pub id: String, + pub bucket_id: String, pub alias: String, } @@ -520,8 +522,9 @@ pub struct GlobalUnaliasBucketResponse(pub GetBucketInfoResponse); // ---- LocalAliasBucket ---- +#[derive(Deserialize)] pub struct LocalAliasBucketRequest { - pub id: String, + pub bucket_id: String, pub access_key_id: String, pub alias: String, } @@ -531,8 +534,9 @@ pub struct LocalAliasBucketResponse(pub GetBucketInfoResponse); // ---- LocalUnaliasBucket ---- +#[derive(Deserialize)] pub struct LocalUnaliasBucketRequest { - pub id: String, + pub bucket_id: String, pub access_key_id: String, pub alias: String, } diff --git a/src/api/admin/api_server.rs b/src/api/admin/api_server.rs index 2f2e3284..82337b7e 100644 --- a/src/api/admin/api_server.rs +++ b/src/api/admin/api_server.rs @@ -39,7 +39,7 @@ pub struct AdminApiServer { admin_token: Option<String>, } -enum Endpoint { +pub enum Endpoint { Old(router_v1::Endpoint), New(String), } @@ -159,7 +159,7 @@ impl ApiHandler for AdminApiServer { AdminApiRequest::Options(req) => req.handle(&self.garage).await, AdminApiRequest::CheckDomain(req) => req.handle(&self.garage).await, AdminApiRequest::Health(req) => req.handle(&self.garage).await, - AdminApiRequest::Metrics(req) => self.handle_metrics(), + AdminApiRequest::Metrics(_req) => self.handle_metrics(), req => { let res = req.handle(&self.garage).await?; json_ok_response(&res) diff --git a/src/api/admin/bucket.rs b/src/api/admin/bucket.rs index f9accba5..8e19b93e 100644 --- a/src/api/admin/bucket.rs +++ b/src/api/admin/bucket.rs @@ -457,7 +457,7 @@ impl EndpointHandler for GlobalAliasBucketRequest { type Response = GlobalAliasBucketResponse; async fn handle(self, garage: &Arc<Garage>) -> Result<GlobalAliasBucketResponse, Error> { - let bucket_id = parse_bucket_id(&self.id)?; + let bucket_id = parse_bucket_id(&self.bucket_id)?; let helper = garage.locked_helper().await; @@ -476,7 +476,7 @@ impl EndpointHandler for GlobalUnaliasBucketRequest { type Response = GlobalUnaliasBucketResponse; async fn handle(self, garage: &Arc<Garage>) -> Result<GlobalUnaliasBucketResponse, Error> { - let bucket_id = parse_bucket_id(&self.id)?; + let bucket_id = parse_bucket_id(&self.bucket_id)?; let helper = garage.locked_helper().await; @@ -495,7 +495,7 @@ impl EndpointHandler for LocalAliasBucketRequest { type Response = LocalAliasBucketResponse; async fn handle(self, garage: &Arc<Garage>) -> Result<LocalAliasBucketResponse, Error> { - let bucket_id = parse_bucket_id(&self.id)?; + let bucket_id = parse_bucket_id(&self.bucket_id)?; let helper = garage.locked_helper().await; @@ -514,7 +514,7 @@ impl EndpointHandler for LocalUnaliasBucketRequest { type Response = LocalUnaliasBucketResponse; async fn handle(self, garage: &Arc<Garage>) -> Result<LocalUnaliasBucketResponse, Error> { - let bucket_id = parse_bucket_id(&self.id)?; + let bucket_id = parse_bucket_id(&self.bucket_id)?; let helper = garage.locked_helper().await; diff --git a/src/api/admin/macros.rs b/src/api/admin/macros.rs index a12dc40b..d8c8f6dc 100644 --- a/src/api/admin/macros.rs +++ b/src/api/admin/macros.rs @@ -22,7 +22,7 @@ macro_rules! admin_endpoints { } impl AdminApiRequest { - fn name(&self) -> &'static str { + pub fn name(&self) -> &'static str { match self { $( Self::$special_endpoint(_) => stringify!($special_endpoint), diff --git a/src/api/admin/router_v2.rs b/src/api/admin/router_v2.rs index e0c54f0e..dacf6793 100644 --- a/src/api/admin/router_v2.rs +++ b/src/api/admin/router_v2.rs @@ -43,22 +43,22 @@ impl AdminApiRequest { POST UpdateKey (body_field, query::id), POST CreateKey (body), POST ImportKey (body), - DELETE DeleteKey (query::id), + POST DeleteKey (query::id), GET ListKeys (), // Bucket endpoints GET GetBucketInfo (query_opt::id, query_opt::global_alias), GET ListBuckets (), POST CreateBucket (body), - DELETE DeleteBucket (query::id), - PUT UpdateBucket (body_field, query::id), + POST DeleteBucket (query::id), + POST UpdateBucket (body_field, query::id), // Bucket-key permissions POST BucketAllowKey (body), POST BucketDenyKey (body), // Bucket aliases - PUT GlobalAliasBucket (query::id, query::alias), - DELETE GlobalUnaliasBucket (query::id, query::alias), - PUT LocalAliasBucket (query::id, query::access_key_id, query::alias), - DELETE LocalUnaliasBucket (query::id, query::access_key_id, query::alias), + POST GlobalAliasBucket (body), + POST GlobalUnaliasBucket (body), + POST LocalAliasBucket (body), + POST LocalUnaliasBucket (body), ]); if let Some(message) = query.nonempty_message() { @@ -131,7 +131,11 @@ impl AdminApiRequest { let body = parse_json_body::<UpdateKeyRequestBody, _, Error>(req).await?; Ok(AdminApiRequest::UpdateKey(UpdateKeyRequest { id, body })) } - Endpoint::DeleteKey { id } => Ok(AdminApiRequest::DeleteKey(DeleteKeyRequest { id })), + + // DeleteKey semantics changed: + // - in v1/ : HTTP DELETE => HTTP 204 No Content + // - in v2/ : HTTP POST => HTTP 200 Ok + // Endpoint::DeleteKey { id } => Ok(AdminApiRequest::DeleteKey(DeleteKeyRequest { id })), // Buckets Endpoint::ListBuckets => Ok(AdminApiRequest::ListBuckets(ListBucketsRequest)), @@ -145,9 +149,13 @@ impl AdminApiRequest { let req = parse_json_body::<CreateBucketRequest, _, Error>(req).await?; Ok(AdminApiRequest::CreateBucket(req)) } - Endpoint::DeleteBucket { id } => { - Ok(AdminApiRequest::DeleteBucket(DeleteBucketRequest { id })) - } + + // DeleteBucket semantics changed:: + // - in v1/ : HTTP DELETE => HTTP 204 No Content + // - in v2/ : HTTP POST => HTTP 200 Ok + // Endpoint::DeleteBucket { id } => { + // Ok(AdminApiRequest::DeleteBucket(DeleteBucketRequest { id })) + // } Endpoint::UpdateBucket { id } => { let body = parse_json_body::<UpdateBucketRequestBody, _, Error>(req).await?; Ok(AdminApiRequest::UpdateBucket(UpdateBucketRequest { @@ -167,10 +175,16 @@ impl AdminApiRequest { } // Bucket aliasing Endpoint::GlobalAliasBucket { id, alias } => Ok(AdminApiRequest::GlobalAliasBucket( - GlobalAliasBucketRequest { id, alias }, + GlobalAliasBucketRequest { + bucket_id: id, + alias, + }, )), Endpoint::GlobalUnaliasBucket { id, alias } => Ok( - AdminApiRequest::GlobalUnaliasBucket(GlobalUnaliasBucketRequest { id, alias }), + AdminApiRequest::GlobalUnaliasBucket(GlobalUnaliasBucketRequest { + bucket_id: id, + alias, + }), ), Endpoint::LocalAliasBucket { id, @@ -178,7 +192,7 @@ impl AdminApiRequest { alias, } => Ok(AdminApiRequest::LocalAliasBucket(LocalAliasBucketRequest { access_key_id, - id, + bucket_id: id, alias, })), Endpoint::LocalUnaliasBucket { @@ -188,7 +202,7 @@ impl AdminApiRequest { } => Ok(AdminApiRequest::LocalUnaliasBucket( LocalUnaliasBucketRequest { access_key_id, - id, + bucket_id: id, alias, }, )), |