Garage v0.9 #473
3 changed files with 45 additions and 50 deletions
|
@ -194,7 +194,7 @@ Example response body:
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### ConnectClusterNodes `POST /v0/connect`
|
#### ConnectClusterNodes `POST /v1/connect`
|
||||||
|
|
||||||
Instructs this Garage node to connect to other Garage nodes at specified addresses.
|
Instructs this Garage node to connect to other Garage nodes at specified addresses.
|
||||||
|
|
||||||
|
@ -319,7 +319,7 @@ Contrary to the CLI that may update only a subset of the fields
|
||||||
values must be specified.
|
values must be specified.
|
||||||
|
|
||||||
|
|
||||||
#### ApplyClusterLayout `POST /v0/layout/apply`
|
#### ApplyClusterLayout `POST /v1/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.
|
||||||
|
@ -336,7 +336,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 /v0/layout/revert`
|
#### RevertClusterLayout `POST /v1/layout/revert`
|
||||||
|
|
||||||
Clears all of the staged layout changes.
|
Clears all of the staged layout changes.
|
||||||
|
|
||||||
|
@ -357,7 +357,7 @@ existing layout in the cluster.
|
||||||
|
|
||||||
### Access key operations
|
### Access key operations
|
||||||
|
|
||||||
#### ListKeys `GET /v0/key`
|
#### ListKeys `GET /v1/key`
|
||||||
|
|
||||||
Returns all API access keys in the cluster.
|
Returns all API access keys in the cluster.
|
||||||
|
|
||||||
|
@ -376,7 +376,7 @@ Example response:
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
#### CreateKey `POST /v0/key`
|
#### CreateKey `POST /v1/key`
|
||||||
|
|
||||||
Creates a new API access key.
|
Creates a new API access key.
|
||||||
|
|
||||||
|
@ -388,7 +388,7 @@ Request body format:
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### ImportKey `POST /v0/key/import`
|
#### ImportKey `POST /v1/key/import`
|
||||||
|
|
||||||
Imports an existing API key.
|
Imports an existing API key.
|
||||||
|
|
||||||
|
@ -402,8 +402,8 @@ Request body format:
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### GetKeyInfo `GET /v0/key?id=<acces key id>`
|
#### GetKeyInfo `GET /v1/key?id=<acces key id>`
|
||||||
#### GetKeyInfo `GET /v0/key?search=<pattern>`
|
#### GetKeyInfo `GET /v1/key?search=<pattern>`
|
||||||
|
|
||||||
Returns information about the requested API access key.
|
Returns information about the requested API access key.
|
||||||
|
|
||||||
|
@ -474,11 +474,11 @@ Example response:
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### DeleteKey `DELETE /v0/key?id=<acces key id>`
|
#### DeleteKey `DELETE /v1/key?id=<acces key id>`
|
||||||
|
|
||||||
Deletes an API access key.
|
Deletes an API access key.
|
||||||
|
|
||||||
#### UpdateKey `POST /v0/key?id=<acces key id>`
|
#### UpdateKey `POST /v1/key?id=<acces key id>`
|
||||||
|
|
||||||
Updates information about the specified API access key.
|
Updates information about the specified API access key.
|
||||||
|
|
||||||
|
@ -501,7 +501,7 @@ The possible flags in `allow` and `deny` are: `createBucket`.
|
||||||
|
|
||||||
### Bucket operations
|
### Bucket operations
|
||||||
|
|
||||||
#### ListBuckets `GET /v0/bucket`
|
#### ListBuckets `GET /v1/bucket`
|
||||||
|
|
||||||
Returns all storage buckets in the cluster.
|
Returns all storage buckets in the cluster.
|
||||||
|
|
||||||
|
@ -543,8 +543,8 @@ Example response:
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
#### GetBucketInfo `GET /v0/bucket?id=<bucket id>`
|
#### GetBucketInfo `GET /v1/bucket?id=<bucket id>`
|
||||||
#### GetBucketInfo `GET /v0/bucket?globalAlias=<alias>`
|
#### GetBucketInfo `GET /v1/bucket?globalAlias=<alias>`
|
||||||
|
|
||||||
Returns information about the requested storage bucket.
|
Returns information about the requested storage bucket.
|
||||||
|
|
||||||
|
@ -587,7 +587,7 @@ Example response:
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### CreateBucket `POST /v0/bucket`
|
#### CreateBucket `POST /v1/bucket`
|
||||||
|
|
||||||
Creates a new storage bucket.
|
Creates a new storage bucket.
|
||||||
|
|
||||||
|
@ -627,13 +627,13 @@ or no alias at all.
|
||||||
Technically, you can also specify both `globalAlias` and `localAlias` and that would create
|
Technically, you can also specify both `globalAlias` and `localAlias` and that would create
|
||||||
two aliases, but I don't see why you would want to do that.
|
two aliases, but I don't see why you would want to do that.
|
||||||
|
|
||||||
#### DeleteBucket `DELETE /v0/bucket?id=<bucket id>`
|
#### DeleteBucket `DELETE /v1/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!
|
||||||
|
|
||||||
#### UpdateBucket `PUT /v0/bucket?id=<bucket id>`
|
#### UpdateBucket `PUT /v1/bucket?id=<bucket id>`
|
||||||
|
|
||||||
Updates configuration of the given bucket.
|
Updates configuration of the given bucket.
|
||||||
|
|
||||||
|
@ -667,7 +667,7 @@ to change only one of the two quotas.
|
||||||
|
|
||||||
### Operations on permissions for keys on buckets
|
### Operations on permissions for keys on buckets
|
||||||
|
|
||||||
#### BucketAllowKey `POST /v0/bucket/allow`
|
#### BucketAllowKey `POST /v1/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.
|
||||||
|
|
||||||
|
@ -688,7 +688,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 /v0/bucket/deny`
|
#### BucketDenyKey `POST /v1/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.
|
||||||
|
|
||||||
|
@ -712,19 +712,19 @@ Other flags will remain unchanged.
|
||||||
|
|
||||||
### Operations on bucket aliases
|
### Operations on bucket aliases
|
||||||
|
|
||||||
#### GlobalAliasBucket `PUT /v0/bucket/alias/global?id=<bucket id>&alias=<global alias>`
|
#### GlobalAliasBucket `PUT /v1/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 /v0/bucket/alias/global?id=<bucket id>&alias=<global alias>`
|
#### GlobalUnaliasBucket `DELETE /v1/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 /v0/bucket/alias/local?id=<bucket id>&accessKeyId=<access key ID>&alias=<local alias>`
|
#### LocalAliasBucket `PUT /v1/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 /v0/bucket/alias/local?id=<bucket id>&accessKeyId<access key ID>&alias=<local alias>`
|
#### LocalUnaliasBucket `DELETE /v1/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.
|
||||||
|
|
||||||
|
|
|
@ -97,35 +97,35 @@ impl Endpoint {
|
||||||
GET "/metrics" => Metrics,
|
GET "/metrics" => Metrics,
|
||||||
GET "/v1/status" => GetClusterStatus,
|
GET "/v1/status" => GetClusterStatus,
|
||||||
GET "/v1/health" => GetClusterHealth,
|
GET "/v1/health" => GetClusterHealth,
|
||||||
POST "/v0/connect" => ConnectClusterNodes,
|
POST ("/v0/connect" | "/v1/connect") => ConnectClusterNodes,
|
||||||
// Layout endpoints
|
// Layout endpoints
|
||||||
GET "/v1/layout" => GetClusterLayout,
|
GET "/v1/layout" => GetClusterLayout,
|
||||||
POST "/v1/layout" => UpdateClusterLayout,
|
POST "/v1/layout" => UpdateClusterLayout,
|
||||||
POST "/v0/layout/apply" => ApplyClusterLayout,
|
POST ("/v0/layout/apply" | "/v1/layout/apply") => ApplyClusterLayout,
|
||||||
POST "/v0/layout/revert" => RevertClusterLayout,
|
POST ("/v0/layout/revert" | "/v1/layout/revert") => RevertClusterLayout,
|
||||||
// API key endpoints
|
// API key endpoints
|
||||||
GET "/v0/key" if id => GetKeyInfo (query_opt::id, query_opt::search),
|
GET ("/v0/key" | "/v1/key") if id => GetKeyInfo (query_opt::id, query_opt::search),
|
||||||
GET "/v0/key" if search => GetKeyInfo (query_opt::id, query_opt::search),
|
GET ("/v0/key" | "/v1/key") if search => GetKeyInfo (query_opt::id, query_opt::search),
|
||||||
POST "/v0/key" if id => UpdateKey (query::id),
|
POST ("/v0/key" | "/v1/key") if id => UpdateKey (query::id),
|
||||||
POST "/v0/key" => CreateKey,
|
POST ("/v0/key" | "/v1/key") => CreateKey,
|
||||||
POST "/v0/key/import" => ImportKey,
|
POST ("/v0/key/import" | "/v1/key/import") => ImportKey,
|
||||||
DELETE "/v0/key" if id => DeleteKey (query::id),
|
DELETE ("/v0/key" | "/v1/key") if id => DeleteKey (query::id),
|
||||||
GET "/v0/key" => ListKeys,
|
GET ("/v0/key" | "/v1/key") => ListKeys,
|
||||||
// Bucket endpoints
|
// Bucket endpoints
|
||||||
GET "/v0/bucket" if id => GetBucketInfo (query_opt::id, query_opt::global_alias),
|
GET ("/v0/bucket" | "/v1/bucket") if id => GetBucketInfo (query_opt::id, query_opt::global_alias),
|
||||||
GET "/v0/bucket" if global_alias => GetBucketInfo (query_opt::id, query_opt::global_alias),
|
GET ("/v0/bucket" | "/v1/bucket") if global_alias => GetBucketInfo (query_opt::id, query_opt::global_alias),
|
||||||
GET "/v0/bucket" => ListBuckets,
|
GET ("/v0/bucket" | "/v1/bucket") => ListBuckets,
|
||||||
POST "/v0/bucket" => CreateBucket,
|
POST ("/v0/bucket" | "/v1/bucket") => CreateBucket,
|
||||||
DELETE "/v0/bucket" if id => DeleteBucket (query::id),
|
DELETE ("/v0/bucket" | "/v1/bucket") if id => DeleteBucket (query::id),
|
||||||
PUT "/v0/bucket" if id => UpdateBucket (query::id),
|
PUT ("/v0/bucket" | "/v1/bucket") if id => UpdateBucket (query::id),
|
||||||
// Bucket-key permissions
|
// Bucket-key permissions
|
||||||
POST "/v0/bucket/allow" => BucketAllowKey,
|
POST ("/v0/bucket/allow" | "/v1/bucket/allow") => BucketAllowKey,
|
||||||
POST "/v0/bucket/deny" => BucketDenyKey,
|
POST ("/v0/bucket/deny" | "/v1/bucket/deny") => BucketDenyKey,
|
||||||
// Bucket aliases
|
// Bucket aliases
|
||||||
PUT "/v0/bucket/alias/global" => GlobalAliasBucket (query::id, query::alias),
|
PUT ("/v0/bucket/alias/global" | "/v1/bucket/alias/global") => GlobalAliasBucket (query::id, query::alias),
|
||||||
DELETE "/v0/bucket/alias/global" => GlobalUnaliasBucket (query::id, query::alias),
|
DELETE ("/v0/bucket/alias/global" | "/v1/bucket/alias/global") => GlobalUnaliasBucket (query::id, query::alias),
|
||||||
PUT "/v0/bucket/alias/local" => LocalAliasBucket (query::id, query::access_key_id, query::alias),
|
PUT ("/v0/bucket/alias/local" | "/v1/bucket/alias/local") => LocalAliasBucket (query::id, query::access_key_id, query::alias),
|
||||||
DELETE "/v0/bucket/alias/local" => LocalUnaliasBucket (query::id, query::access_key_id, query::alias),
|
DELETE ("/v0/bucket/alias/local" | "/v1/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() {
|
||||||
|
|
|
@ -26,6 +26,7 @@ macro_rules! router_match {
|
||||||
$($meth:ident $path:pat $(if $required:ident)? => $api:ident $(($($conv:ident :: $param:ident),*))?,)*
|
$($meth:ident $path:pat $(if $required:ident)? => $api:ident $(($($conv:ident :: $param:ident),*))?,)*
|
||||||
]) => {{
|
]) => {{
|
||||||
{
|
{
|
||||||
|
#[allow(unused_parens)]
|
||||||
match ($method, $reqpath) {
|
match ($method, $reqpath) {
|
||||||
$(
|
$(
|
||||||
(&Method::$meth, $path) if true $(&& $query.$required.is_some())? => Endpoint::$api {
|
(&Method::$meth, $path) if true $(&& $query.$required.is_some())? => Endpoint::$api {
|
||||||
|
@ -128,12 +129,6 @@ macro_rules! router_match {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
(@if ($($cond:tt)+) then ($($then:tt)*) else ($($else:tt)*)) => {
|
|
||||||
$($then)*
|
|
||||||
};
|
|
||||||
(@if () then ($($then:tt)*) else ($($else:tt)*)) => {
|
|
||||||
$($else)*
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This macro is used to generate part of the code in this module. It must be called only one, and
|
/// This macro is used to generate part of the code in this module. It must be called only one, and
|
||||||
|
|
Loading…
Reference in a new issue