more complete admin API #298

Merged
lx merged 48 commits from admin-api into main 2022-05-24 10:16:40 +00:00
2 changed files with 48 additions and 48 deletions
Showing only changes of commit 440a577563 - Show all commits

View file

@ -15,7 +15,7 @@ Returns internal Garage metrics in Prometheus format.
## Cluster operations ## Cluster operations
### GetClusterStatus `GET /status` ### GetClusterStatus `GET /v0/status`
Returns the cluster's current status in JSON, including: Returns the cluster's current status in JSON, including:
@ -94,7 +94,7 @@ Example response body:
} }
``` ```
### GetClusterLayout `GET /layout` ### GetClusterLayout `GET /v0/layout`
Returns the cluster's current layout in JSON, including: Returns the cluster's current layout in JSON, including:
@ -143,7 +143,7 @@ Example response body:
} }
``` ```
### UpdateClusterLayout `POST /layout` ### UpdateClusterLayout `POST /v0/layout`
Send modifications to the cluster layout. These modifications will Send modifications to the cluster layout. These modifications will
be included in the staged role changes, visible in subsequent calls be included in the staged role changes, visible in subsequent calls
@ -174,7 +174,7 @@ Contrary to the CLI that may update only a subset of the fields
values must be specified. values must be specified.
### ApplyClusterLayout `POST /layout/apply` ### ApplyClusterLayout `POST /v0/layout/apply`
Applies to the cluster the layout changes currently registered as Applies to the cluster the layout changes currently registered as
staged layout changes. staged layout changes.
@ -191,7 +191,7 @@ Similarly to the CLI, the body must include the version of the new layout
that will be created, which MUST be 1 + the value of the currently that will be created, which MUST be 1 + the value of the currently
existing layout in the cluster. existing layout in the cluster.
### RevertClusterLayout `POST /layout/revert` ### RevertClusterLayout `POST /v0/layout/revert`
Clears all of the staged layout changes. Clears all of the staged layout changes.
@ -212,7 +212,7 @@ existing layout in the cluster.
## Access key operations ## Access key operations
### ListKeys `GET /key` ### ListKeys `GET /v0/key`
Returns all API access keys in the cluster. Returns all API access keys in the cluster.
@ -231,7 +231,7 @@ Example response:
] ]
``` ```
### CreateKey `POST /key` ### CreateKey `POST /v0/key`
Creates a new API access key. Creates a new API access key.
@ -243,8 +243,8 @@ Request body format:
} }
``` ```
### GetKeyInfo `GET /key?id=<acces key id>` ### GetKeyInfo `GET /v0/key?id=<acces key id>`
### GetKeyInfo `GET /key?search=<pattern>` ### GetKeyInfo `GET /v0/key?search=<pattern>`
Returns information about the requested API access key. Returns information about the requested API access key.
@ -315,11 +315,11 @@ Example response:
} }
``` ```
### DeleteKey `DELETE /key?id=<acces key id>` ### DeleteKey `DELETE /v0/key?id=<acces key id>`
Deletes an API access key. Deletes an API access key.
### UpdateKey `POST /key?id=<acces key id>` ### UpdateKey `POST /v0/key?id=<acces key id>`
Updates information about the specified API access key. Updates information about the specified API access key.
@ -342,7 +342,7 @@ The possible flags in `allow` and `deny` are: `createBucket`.
## Bucket operations ## Bucket operations
### ListBuckets `GET /bucket` ### ListBuckets `GET /v0/bucket`
Returns all storage buckets in the cluster. Returns all storage buckets in the cluster.
@ -384,8 +384,8 @@ Example response:
] ]
``` ```
### GetBucketInfo `GET /bucket?id=<bucket id>` ### GetBucketInfo `GET /v0/bucket?id=<bucket id>`
### GetBucketInfo `GET /bucket?globalAlias=<alias>` ### GetBucketInfo `GET /v0/bucket?globalAlias=<alias>`
Returns information about the requested storage bucket. Returns information about the requested storage bucket.
@ -418,7 +418,7 @@ Example response:
} }
``` ```
### CreateBucket `POST /bucket` ### CreateBucket `POST /v0/bucket`
Creates a new storage bucket. Creates a new storage bucket.
@ -451,13 +451,13 @@ OR
Creates a new bucket, either with a global alias, a local one, Creates a new bucket, either with a global alias, a local one,
or no alias at all. or no alias at all.
### DeleteBucket `DELETE /bucket?id=<bucket id>` ### DeleteBucket `DELETE /v0/bucket?id=<bucket id>`
Deletes a storage bucket. A bucket cannot be deleted if it is not empty. Deletes a storage bucket. A bucket cannot be deleted if it is not empty.
Warning: this will delete all aliases associated with the bucket! Warning: this will delete all aliases associated with the bucket!
### PutBucketWebsite `PUT /bucket/website?id=<bucket id>` ### PutBucketWebsite `PUT /v0/bucket/website?id=<bucket id>`
Sets the website configuration for a bucket (this also enables website access for this bucket). Sets the website configuration for a bucket (this also enables website access for this bucket).
@ -473,14 +473,14 @@ Request body format:
The field `errorDocument` is optional, if no error document is set a generic error message is displayed when errors happen. The field `errorDocument` is optional, if no error document is set a generic error message is displayed when errors happen.
### DeleteBucketWebsite `DELETE /bucket/website?id=<bucket id>` ### DeleteBucketWebsite `DELETE /v0/bucket/website?id=<bucket id>`
Deletes the website configuration for a bucket (disables website access for this bucket). Deletes the website configuration for a bucket (disables website access for this bucket).
## Operations on permissions for keys on buckets ## Operations on permissions for keys on buckets
### BucketAllowKey `POST /bucket/allow` ### BucketAllowKey `POST /v0/bucket/allow`
Allows a key to do read/write/owner operations on a bucket. Allows a key to do read/write/owner operations on a bucket.
@ -501,7 +501,7 @@ Request body format:
Flags in `permissions` which have the value `true` will be activated. Flags in `permissions` which have the value `true` will be activated.
Other flags will remain unchanged. Other flags will remain unchanged.
### BucketDenyKey `POST /bucket/deny` ### BucketDenyKey `POST /v0/bucket/deny`
Denies a key from doing read/write/owner operations on a bucket. Denies a key from doing read/write/owner operations on a bucket.
@ -525,19 +525,19 @@ Other flags will remain unchanged.
## Operations on bucket aliases ## Operations on bucket aliases
### GlobalAliasBucket `PUT /bucket/alias/global?id=<bucket id>&alias=<global alias>` ### GlobalAliasBucket `PUT /v0/bucket/alias/global?id=<bucket id>&alias=<global alias>`
Empty body. Creates a global alias for a bucket. Empty body. Creates a global alias for a bucket.
### GlobalUnaliasBucket `DELETE /bucket/alias/global?id=<bucket id>&alias=<global alias>` ### GlobalUnaliasBucket `DELETE /v0/bucket/alias/global?id=<bucket id>&alias=<global alias>`
Removes a global alias for a bucket. Removes a global alias for a bucket.
### LocalAliasBucket `PUT /bucket/alias/local?id=<bucket id>&accessKeyId=<access key ID>&alias=<local alias>` ### LocalAliasBucket `PUT /v0/bucket/alias/local?id=<bucket id>&accessKeyId=<access key ID>&alias=<local alias>`
Empty body. Creates a local alias for a bucket in the namespace of a specific access key. Empty body. Creates a local alias for a bucket in the namespace of a specific access key.
### LocalUnaliasBucket `DELETE /bucket/alias/local?id=<bucket id>&accessKeyId<access key ID>&alias=<local alias>` ### LocalUnaliasBucket `DELETE /v0/bucket/alias/local?id=<bucket id>&accessKeyId<access key ID>&alias=<local alias>`
Removes a local alias for a bucket in the namespace of a specific access key. Removes a local alias for a bucket in the namespace of a specific access key.

View file

@ -90,35 +90,35 @@ impl Endpoint {
let res = router_match!(@gen_path_parser (req.method(), path, query) [ let res = router_match!(@gen_path_parser (req.method(), path, query) [
OPTIONS _ => Options, OPTIONS _ => Options,
GET "/metrics" => Metrics, GET "/metrics" => Metrics,
GET "/status" => GetClusterStatus, GET "/v0/status" => GetClusterStatus,
// Layout endpoints // Layout endpoints
GET "/layout" => GetClusterLayout, GET "/v0/layout" => GetClusterLayout,
POST "/layout" => UpdateClusterLayout, POST "/v0/layout" => UpdateClusterLayout,
POST "/layout/apply" => ApplyClusterLayout, POST "/v0/layout/apply" => ApplyClusterLayout,
POST "/layout/revert" => RevertClusterLayout, POST "/v0/layout/revert" => RevertClusterLayout,
// API key endpoints // API key endpoints
GET "/key" if id => GetKeyInfo (query_opt::id, query_opt::search), GET "/v0/key" if id => GetKeyInfo (query_opt::id, query_opt::search),
GET "/key" if search => GetKeyInfo (query_opt::id, query_opt::search), GET "/v0/key" if search => GetKeyInfo (query_opt::id, query_opt::search),
POST "/key" if id => UpdateKey (query::id), POST "/v0/key" if id => UpdateKey (query::id),
POST "/key" => CreateKey, POST "/v0/key" => CreateKey,
DELETE "/key" if id => DeleteKey (query::id), DELETE "/v0/key" if id => DeleteKey (query::id),
GET "/key" => ListKeys, GET "/v0/key" => ListKeys,
// Bucket endpoints // Bucket endpoints
GET "/bucket" if id => GetBucketInfo (query_opt::id, query_opt::global_alias), GET "/v0/bucket" if id => GetBucketInfo (query_opt::id, query_opt::global_alias),
GET "/bucket" if global_alias => GetBucketInfo (query_opt::id, query_opt::global_alias), GET "/v0/bucket" if global_alias => GetBucketInfo (query_opt::id, query_opt::global_alias),
GET "/bucket" => ListBuckets, GET "/v0/bucket" => ListBuckets,
POST "/bucket" => CreateBucket, POST "/v0/bucket" => CreateBucket,
DELETE "/bucket" if id => DeleteBucket (query::id), DELETE "/v0/bucket" if id => DeleteBucket (query::id),
PUT "/bucket/website" if id => PutBucketWebsite (query::id), PUT "/v0/bucket/website" if id => PutBucketWebsite (query::id),
DELETE "/bucket/website" if id => DeleteBucketWebsite (query::id), DELETE "/v0/bucket/website" if id => DeleteBucketWebsite (query::id),
// Bucket-key permissions // Bucket-key permissions
POST "/bucket/allow" => BucketAllowKey, POST "/v0/bucket/allow" => BucketAllowKey,
POST "/bucket/deny" => BucketDenyKey, POST "/v0/bucket/deny" => BucketDenyKey,
// Bucket aliases // Bucket aliases
PUT "/bucket/alias/global" => GlobalAliasBucket (query::id, query::alias), PUT "/v0/bucket/alias/global" => GlobalAliasBucket (query::id, query::alias),
DELETE "/bucket/alias/global" => GlobalUnaliasBucket (query::id, query::alias), DELETE "/v0/bucket/alias/global" => GlobalUnaliasBucket (query::id, query::alias),
PUT "/bucket/alias/local" => LocalAliasBucket (query::id, query::access_key_id, query::alias), PUT "/v0/bucket/alias/local" => LocalAliasBucket (query::id, query::access_key_id, query::alias),
DELETE "/bucket/alias/local" => LocalUnaliasBucket (query::id, query::access_key_id, query::alias), DELETE "/v0/bucket/alias/local" => LocalUnaliasBucket (query::id, query::access_key_id, query::alias),
]); ]);
if let Some(message) = query.nonempty_message() { if let Some(message) = query.nonempty_message() {