aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlex Auvolat <lx@deuxfleurs.fr>2025-01-28 16:18:48 +0100
committerAlex Auvolat <lx@deuxfleurs.fr>2025-01-29 19:26:16 +0100
commited58f8b0fe3c44eac7416b3aaa444d1b568f8918 (patch)
tree3f4d85fe745ebb7ce257348828c5dfc4f28a3285 /src
parent5037b97dd41cb668289708384c13006f5db2afd7 (diff)
downloadgarage-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.rs12
-rw-r--r--src/api/admin/api_server.rs4
-rw-r--r--src/api/admin/bucket.rs8
-rw-r--r--src/api/admin/macros.rs2
-rw-r--r--src/api/admin/router_v2.rs44
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,
},
)),