openapi: 3.0.0 info: description: | Administrate your Garage cluster programatically, including status, layout, keys, buckets, and maintainance tasks. *Disclaimer: The API is not stable yet, hence its v0 tag. The API can change at any time, and changes can include breaking backward compatibility. Read the changelog and upgrade your scripts before upgrading. Additionnaly, this specification is very early stage and can contain bugs, especially on error return codes/types that are not tested yet. Do not expect a well finished and polished product!* title: Garage Administration API v0+garage-v0.8.0 version: v0.8.0 servers: - description: A local server url: http://localhost:3903/v0/ security: - bearerAuth: [] paths: /status: get: description: | Returns the cluster's current status, including: - ID of the node being queried and its version of the Garage daemon - Live nodes - Currently configured cluster layout - Staged changes to the cluster layout operationId: GetNodes responses: "500": description: | The server can not answer your request because it is in a bad state "200": content: application/json: schema: $ref: '#/components/schemas/GetNodes_200_response' description: | Information about the queried node, its environment and the current layout summary: Status of this node and other nodes in the cluster tags: - Nodes /connect: post: description: | Instructs this Garage node to connect to other Garage nodes at specified `@`. `node_id` is generated automatically on node start. operationId: AddNode requestBody: content: application/json: schema: example: - ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f@10.0.0.11:3901 - 4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff@10.0.0.12:3901 items: type: string type: array required: true responses: "500": description: | The server can not answer your request because it is in a bad state "400": description: | Your request is malformed, check your JSON "200": content: application/json: schema: example: - success: true error: null - success: false error: Handshake error items: $ref: '#/components/schemas/AddNode_200_response_inner' type: array description: | The request has been handled correctly but it does not mean that all connection requests succeeded; some might have fail, you need to check the body! summary: Connect target node to other Garage nodes tags: - Nodes /layout: get: description: "Returns the cluster's current layout, including:\n - Currently\ \ configured cluster layout\n - Staged changes to the cluster layout\n \n\ *The info returned by this endpoint is a subset of the info returned by `GET\ \ /status`.*\n" operationId: GetLayout responses: "500": description: | The server can not answer your request because it is in a bad state "200": content: application/json: schema: $ref: '#/components/schemas/ClusterLayout' description: | Returns the cluster's current cluster layout: - Currently configured cluster layout - Staged changes to the cluster layout summary: Details on the current and staged layout tags: - Layout post: description: | Send modifications to the cluster layout. These modifications will be included in the staged role changes, visible in subsequent calls of `GET /layout`. Once the set of staged changes is satisfactory, the user may call `POST /layout/apply` to apply the changed changes, or `POST /layout/revert` to clear all of the staged changes in the layout. Note that setting the capacity to `null` will configure the node as a gateway. operationId: AddLayout requestBody: content: application/json: schema: additionalProperties: $ref: '#/components/schemas/NodeClusterInfo' example: e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b: zone: geneva capacity: 4 tags: - gateway "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": null type: object description: | To add a new node to the layout or to change the configuration of an existing node, simply set the values you want. To remove a node, set it to `null` instead of passing a configuration object. Contrary to the CLI that may update only a subset of the fields capacity, zone and tags, when calling this API all of these values must be specified. required: true responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: Invalid syntax or requested change "200": description: The layout modification has been correctly staged summary: Send modifications to the cluster layout tags: - Layout /layout/apply: post: description: | Applies to the cluster the layout changes currently registered as staged layout changes. operationId: ApplyLayout requestBody: content: application/json: schema: $ref: '#/components/schemas/LayoutVersion' description: | 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 existing layout in the cluster. required: true responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: Invalid syntax or requested change "200": description: "The staged layout has been applied as the new layout of the\ \ cluster, a rebalance has been triggered." summary: Apply staged layout tags: - Layout /layout/revert: post: description: | Clears all of the staged layout changes. operationId: RevertLayout requestBody: content: application/json: schema: $ref: '#/components/schemas/LayoutVersion' description: | Reverting the staged changes is done by incrementing the version number and clearing the contents of the staged change list. Similarly to the CLI, the body must include the incremented version number, which MUST be 1 + the value of the currently existing layout in the cluster. required: true responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: Invalid syntax or requested change "200": description: "The staged layout has been cleared, you can start again sending\ \ modification from a fresh copy with `POST /layout`." summary: Clear staged layout tags: - Layout /key: get: description: | Returns all API access keys in the cluster. operationId: ListKeys responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "200": content: application/json: schema: example: - id: GK31c2f218a2e44f485b94239e name: test-key - id: GKe10061ac9c2921f09e4c5540 name: "" items: $ref: '#/components/schemas/ListKeys_200_response_inner' type: array description: | Returns the key identifier (aka `AWS_ACCESS_KEY_ID`) and its associated, human friendly, name if any (otherwise return an empty string) summary: List all keys tags: - Key post: description: | Creates a new API access key. operationId: AddKey requestBody: content: application/json: schema: $ref: '#/components/schemas/AddKey_request' description: | "You can set a friendly name for this key, send an empty string instead" required: true responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: Invalid syntax or requested change "200": content: application/json: schema: $ref: '#/components/schemas/KeyInfo' description: The key has been added summary: Create a new API key tags: - Key /key?id={access_key}: delete: description: "Delete a key from the cluster. Its access will be removed from\ \ all the buckets. Buckets are not automatically deleted and can be dangling.\ \ You should manually delete them before. \n" operationId: DeleteKey parameters: - description: The exact API access key generated by Garage example: GK31c2f218a2e44f485b94239e explode: false in: path name: access_key required: true schema: type: string style: simple responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "200": description: The key has been deleted summary: Delete a key tags: - Key get: description: | Return information about a specific key and return its information operationId: GetKey parameters: - description: The exact API access key generated by Garage example: GK31c2f218a2e44f485b94239e explode: false in: path name: access_key required: true schema: type: string style: simple responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "200": content: application/json: schema: $ref: '#/components/schemas/KeyInfo' description: | Returns information about the key summary: Get key information tags: - Key post: description: | Updates information about the specified API access key. operationId: UpdateKey parameters: - description: The exact API access key generated by Garage example: GK31c2f218a2e44f485b94239e explode: false in: path name: access_key required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateKey_request' description: | For a given key, provide a first set with the permissions to grant, and a second set with the permissions to remove required: true responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: Invalid syntax or requested change "200": content: application/json: schema: $ref: '#/components/schemas/KeyInfo' description: | Returns information about the key summary: Update a key tags: - Key /key?search={pattern}: get: description: | Find the first key matching the given pattern based on its identifier aor friendly name and return its information. operationId: SearchKey parameters: - description: A pattern (beginning or full string) corresponding to a key identifier or friendly name example: test-k explode: false in: path name: pattern required: true schema: type: string style: simple responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "200": content: application/json: schema: $ref: '#/components/schemas/KeyInfo' description: | Returns information about the key summary: Select key by pattern tags: - Key /key/import: post: description: | Imports an existing API key. This feature must only be used for migrations and backup restore. **Do not use it to generate custom key identifiers or you will break your Garage cluster.** operationId: ImportKey requestBody: content: application/json: schema: $ref: '#/components/schemas/ImportKey_request' description: | Information on the key to import required: true responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: Invalid syntax or requested change "200": content: application/json: schema: $ref: '#/components/schemas/KeyInfo' description: The key has been imported into the system summary: Import an existing key tags: - Key /bucket: get: description: | List all the buckets on the cluster with their UUID and their global and local aliases. operationId: ListBuckets responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "200": content: application/json: schema: example: - id: 70dc3bed7fe83a75e46b66e7ddef7d56e65f3c02f9f80b6749fb97eccb5e1033 globalAliases: - container_registry - id: 96470e0df00ec28807138daf01915cfda2bee8eccc91dea9558c0b4855b5bf95 localAliases: - alias: my_documents accessKeyid: GK31c2f218a2e44f485b94239e - id: d7452a935e663fc1914f3a5515163a6d3724010ce8dfd9e4743ca8be5974f995 globalAliases: - example.com - www.example.com localAliases: - alias: corp_website accessKeyId: GKe10061ac9c2921f09e4c5540 - alias: web accessKeyid: GK31c2f218a2e44f485b94239e - id: "" items: $ref: '#/components/schemas/ListBuckets_200_response_inner' type: array description: | Returns the UUID of the bucket and all its aliases summary: List all buckets tags: - Bucket post: description: | Creates a new bucket, either with a global alias, a local one, or no alias at all. Technically, you can also specify both `globalAlias` and `localAlias` and that would create two aliases. operationId: CreateBucket requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateBucket_request' description: | Aliases to put on the new bucket required: true responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: The payload is not formatted correctly "200": content: application/json: schema: $ref: '#/components/schemas/BucketInfo' description: Returns exhaustive information about the bucket summary: Create a bucket tags: - Bucket /bucket?id={bucket_id}: delete: description: | Delete a bucket.Deletes a storage bucket. A bucket cannot be deleted if it is not empty. **Warning:** this will delete all aliases associated with the bucket! operationId: DeleteBucket parameters: - description: "The exact bucket identifier, a 32 bytes hexadecimal string" example: b4018dc61b27ccb5c64ec1b24f53454bbbd180697c758c4d47a22a8921864a87 explode: false in: path name: bucket_id required: true schema: type: string style: simple responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: Bucket is not empty "404": description: Bucket not found "204": description: Bucket has been deleted summary: Delete a bucket tags: - Bucket get: description: | Given a bucket identifier, get its information. It includes its aliases, its web configuration, keys that have some permissions on it, some statistics (number of objects, size), number of dangling multipart uploads, and its quotas (if any). operationId: GetBucketInfo parameters: - description: "The exact bucket identifier, a 32 bytes hexadecimal string" example: b4018dc61b27ccb5c64ec1b24f53454bbbd180697c758c4d47a22a8921864a87 explode: false in: path name: bucket_id required: true schema: type: string style: simple responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "404": description: Bucket not found "200": content: application/json: schema: $ref: '#/components/schemas/BucketInfo' description: Returns exhaustive information about the bucket summary: Get a bucket tags: - Bucket put: description: | All fields (`websiteAccess` and `quotas`) are optionnal. If they are present, the corresponding modifications are applied to the bucket, otherwise nothing is changed. In `websiteAccess`: if `enabled` is `true`, `indexDocument` must be specified. The field `errorDocument` is optional, if no error document is set a generic error message is displayed when errors happen. Conversely, if `enabled` is `false`, neither `indexDocument` nor `errorDocument` must be specified. In `quotas`: new values of `maxSize` and `maxObjects` must both be specified, or set to `null` to remove the quotas. An absent value will be considered the same as a `null`. It is not possible to change only one of the two quotas. operationId: UpdateBucket parameters: - description: "The exact bucket identifier, a 32 bytes hexadecimal string" example: b4018dc61b27ccb5c64ec1b24f53454bbbd180697c758c4d47a22a8921864a87 explode: false in: path name: bucket_id required: true schema: type: string style: simple requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateBucket_request' description: | Requested changes on the bucket. Both root fields are optionals. required: true responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: "Bad request, check your body." "404": description: Bucket not found "200": content: application/json: schema: $ref: '#/components/schemas/BucketInfo' description: Returns exhaustive information about the bucket summary: Update a bucket tags: - Bucket /bucket?globalAlias={alias}: get: description: | Find a bucket by its global alias operationId: FindBucketInfo parameters: - description: The exact global alias of one of the existing buckets example: my_documents explode: false in: path name: alias required: true schema: type: string style: simple responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "404": description: Bucket not found "200": content: application/json: schema: $ref: '#/components/schemas/BucketInfo' description: Returns exhaustive information about the bucket summary: Find a bucket tags: - Bucket /bucket/allow: post: description: | ⚠️ **DISCLAIMER**: Garage's developers are aware that this endpoint has an unconventional semantic. Be extra careful when implementing it, its behavior is not obvious. Allows a key to do read/write/owner operations on a bucket. Flags in permissions which have the value true will be activated. Other flags will remain unchanged (ie. they will keep their internal value). For example, if you set read to true, the key will be allowed to read the bucket. If you set it to false, the key will keeps its previous read permission. If you want to disallow read for the key, check the DenyBucketKey operation. operationId: AllowBucketKey requestBody: content: application/json: schema: $ref: '#/components/schemas/AllowBucketKey_request' description: | Aliases to put on the new bucket required: true responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: "Bad request, check your request body" "404": description: Bucket not found "200": content: application/json: schema: $ref: '#/components/schemas/BucketInfo' description: Returns exhaustive information about the bucket summary: Allow key tags: - Bucket /bucket/deny: post: description: | ⚠️ **DISCLAIMER**: Garage's developers are aware that this endpoint has an unconventional semantic. Be extra careful when implementing it, its behavior is not obvious. Denies a key from doing read/write/owner operations on a bucket. Flags in permissions which have the value true will be deactivated. Other flags will remain unchanged. For example, if you set read to true, the key will be denied from reading. If you set read to false, the key will keep its previous permissions. If you want the key to have the reading permission, check the AllowBucketKey operation. operationId: DenyBucketKey requestBody: content: application/json: schema: $ref: '#/components/schemas/AllowBucketKey_request' description: | Aliases to put on the new bucket required: true responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: "Bad request, check your request body" "404": description: Bucket not found "200": content: application/json: schema: $ref: '#/components/schemas/BucketInfo' description: Returns exhaustive information about the bucket summary: Deny key tags: - Bucket /bucket/alias/global: delete: description: | Delete a global alias from the target bucket operationId: DeleteBucketGlobalAlias parameters: - example: e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b explode: true in: query name: id required: true schema: type: string style: form - example: my_documents explode: true in: query name: alias required: true schema: type: string style: form responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: "Bad request, check your request body" "404": description: Bucket not found "200": content: application/json: schema: $ref: '#/components/schemas/BucketInfo' description: Returns exhaustive information about the bucket summary: Delete a global alias tags: - Bucket put: description: | Add a global alias to the target bucket operationId: PutBucketGlobalAlias parameters: - example: e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b explode: true in: query name: id required: true schema: type: string style: form - example: my_documents explode: true in: query name: alias required: true schema: type: string style: form responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: "Bad request, check your request body" "404": description: Bucket not found "200": content: application/json: schema: $ref: '#/components/schemas/BucketInfo' description: Returns exhaustive information about the bucket summary: Add a global alias tags: - Bucket /bucket/alias/local: delete: description: | Delete a local alias, bound to specified account, from the target bucket operationId: DeleteBucketLocalAlias parameters: - example: e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b explode: true in: query name: id required: true schema: type: string style: form - example: GK31c2f218a2e44f485b94239e explode: true in: query name: accessKeyId required: true schema: type: string style: form - example: my_documents explode: true in: query name: alias required: true schema: type: string style: form responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: "Bad request, check your request body" "404": description: Bucket not found "200": content: application/json: schema: $ref: '#/components/schemas/BucketInfo' description: Returns exhaustive information about the bucket summary: Delete a local alias tags: - Bucket put: description: | Add a local alias, bound to specified account, to the target bucket operationId: PutBucketLocalAlias parameters: - example: e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b explode: true in: query name: id required: true schema: type: string style: form - example: GK31c2f218a2e44f485b94239e explode: true in: query name: accessKeyId required: true schema: type: string style: form - example: my_documents explode: true in: query name: alias required: true schema: type: string style: form responses: "500": description: The server can not handle your request. Check your connectivity with the rest of the cluster. "400": description: "Bad request, check your request body" "404": description: Bucket not found "200": content: application/json: schema: $ref: '#/components/schemas/BucketInfo' description: Returns exhaustive information about the bucket summary: Add a local alias tags: - Bucket components: schemas: NodeNetworkInfo: properties: addr: example: 10.0.0.11:3901 type: string is_up: example: true type: boolean last_seen_secs_ago: example: 9 nullable: true type: integer hostname: example: node1 type: string required: - addr - hostname - is_up - last_seen_secs_ago type: object NodeClusterInfo: example: zone: dc1 capacity: 4 tags: - gateway - fast properties: zone: example: dc1 type: string capacity: example: 4 nullable: true type: integer tags: description: | User defined tags, put whatever makes sense for you, these tags are not interpreted by Garage example: - gateway - fast items: type: string type: array required: - capacity - tags - zone type: object ClusterLayout: example: roles: ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f: zone: madrid capacity: 3 tags: - fast - amd64 "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": zone: geneva capacity: 7 tags: - arm64 stagedRoleChanges: e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b: zone: geneva capacity: 4 tags: - gateway version: 12 properties: version: example: 12 type: integer roles: additionalProperties: $ref: '#/components/schemas/NodeClusterInfo' example: ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f: zone: madrid capacity: 3 tags: - fast - amd64 "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": zone: geneva capacity: 7 tags: - arm64 type: object stagedRoleChanges: additionalProperties: $ref: '#/components/schemas/NodeClusterInfo' example: e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b: zone: geneva capacity: 4 tags: - gateway type: object required: - roles - stagedRoleChanges - version type: object LayoutVersion: example: version: 13 properties: version: example: 13 type: integer type: object KeyInfo: example: accessKeyId: GK31c2f218a2e44f485b94239e secretAccessKey: b892c0665f0ada8a4755dae98baa3b133590e11dae3bcc1f9d769d67f16c3835 permissions: createBucket: false buckets: - permissions: owner: false read: true write: true localAliases: - GK31c2f218a2e44f485b94239e:localname - GK31c2f218a2e44f485b94239e:localname globalAliases: - my-bucket - my-bucket id: 70dc3bed7fe83a75e46b66e7ddef7d56e65f3c02f9f80b6749fb97eccb5e1033 - permissions: owner: false read: true write: true localAliases: - GK31c2f218a2e44f485b94239e:localname - GK31c2f218a2e44f485b94239e:localname globalAliases: - my-bucket - my-bucket id: 70dc3bed7fe83a75e46b66e7ddef7d56e65f3c02f9f80b6749fb97eccb5e1033 name: test-key properties: name: example: test-key type: string accessKeyId: example: GK31c2f218a2e44f485b94239e type: string secretAccessKey: example: b892c0665f0ada8a4755dae98baa3b133590e11dae3bcc1f9d769d67f16c3835 type: string permissions: $ref: '#/components/schemas/KeyInfo_permissions' buckets: items: $ref: '#/components/schemas/KeyInfo_buckets_inner' type: array type: object BucketInfo: example: websiteConfig: indexDocument: index.html errorDocument: error/400.html quotas: maxSize: 0 maxObjects: 6 keys: - accessKeyId: accessKeyId bucketLocalAliases: - my_documents - my_documents permissions: owner: true read: true write: true name: name - accessKeyId: accessKeyId bucketLocalAliases: - my_documents - my_documents permissions: owner: true read: true write: true name: name bytes: 13189855625 objects: 14827 globalAliases: - my_documents - my_documents id: afa8f0a22b40b1247ccd0affb869b0af5cff980924a20e4b5e0720a44deb8d39 websiteAccess: true unfinishedUploads: 0 properties: id: example: afa8f0a22b40b1247ccd0affb869b0af5cff980924a20e4b5e0720a44deb8d39 type: string globalAliases: items: example: my_documents type: string type: array websiteAccess: example: true type: boolean websiteConfig: $ref: '#/components/schemas/BucketInfo_websiteConfig' keys: items: $ref: '#/components/schemas/BucketKeyInfo' type: array objects: example: 14827 format: int64 type: integer bytes: example: 13189855625 format: int64 type: integer unfinishedUploads: example: 0 type: integer quotas: $ref: '#/components/schemas/BucketInfo_quotas' type: object BucketKeyInfo: example: accessKeyId: accessKeyId bucketLocalAliases: - my_documents - my_documents permissions: owner: true read: true write: true name: name properties: accessKeyId: type: string name: type: string permissions: $ref: '#/components/schemas/CreateBucket_request_localAlias_allow' bucketLocalAliases: items: example: my_documents type: string type: array type: object GetNodes_200_response: example: layout: roles: ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f: zone: madrid capacity: 3 tags: - fast - amd64 "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": zone: geneva capacity: 7 tags: - arm64 stagedRoleChanges: e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b: zone: geneva capacity: 4 tags: - gateway version: 12 node: ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f knownNodes: ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f: addr: 10.0.0.11:3901 is_up: true last_seen_secs_ago: 9 hostname: orion "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": addr: 10.0.0.12:3901 is_up: true last_seen_secs_ago: 13 hostname: pegasus e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b: addr: 10.0.0.13:3901 is_up: true last_seen_secs_ago: 2 hostname: neptune garageVersion: v0.7.3 properties: node: example: ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f type: string garageVersion: example: v0.7.3 type: string knownNodes: additionalProperties: $ref: '#/components/schemas/NodeNetworkInfo' example: ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f: addr: 10.0.0.11:3901 is_up: true last_seen_secs_ago: 9 hostname: orion "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": addr: 10.0.0.12:3901 is_up: true last_seen_secs_ago: 13 hostname: pegasus e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b: addr: 10.0.0.13:3901 is_up: true last_seen_secs_ago: 2 hostname: neptune type: object layout: $ref: '#/components/schemas/ClusterLayout' required: - garageVersion - knownNodes - layout - node type: object AddNode_200_response_inner: properties: success: example: true type: boolean error: nullable: true type: string example: null type: object ListKeys_200_response_inner: properties: id: type: string name: type: string required: - id type: object AddKey_request: properties: name: example: test-key type: string type: object UpdateKey_request_allow: properties: createBucket: example: true type: boolean type: object example: null UpdateKey_request_deny: properties: createBucket: example: true type: boolean type: object UpdateKey_request: properties: name: example: test-key type: string allow: $ref: '#/components/schemas/UpdateKey_request_allow' deny: $ref: '#/components/schemas/UpdateKey_request_deny' type: object ImportKey_request: properties: name: example: test-key type: string accessKeyId: example: GK31c2f218a2e44f485b94239e type: string secretAccessKey: example: b892c0665f0ada8a4755dae98baa3b133590e11dae3bcc1f9d769d67f16c3835 type: string required: - accessKeyId - name - secretAccessKey type: object ListBuckets_200_response_inner_localAliases_inner: properties: alias: type: string accessKeyId: type: string required: - accessKeyId - alias type: object ListBuckets_200_response_inner: properties: id: type: string globalAliases: items: type: string type: array localAliases: items: $ref: '#/components/schemas/ListBuckets_200_response_inner_localAliases_inner' type: array required: - id type: object CreateBucket_request_localAlias_allow: example: owner: true read: true write: true properties: read: example: true type: boolean write: example: true type: boolean owner: example: true type: boolean type: object CreateBucket_request_localAlias: properties: accessKeyId: type: string alias: type: string allow: $ref: '#/components/schemas/CreateBucket_request_localAlias_allow' type: object CreateBucket_request: properties: globalAlias: example: my_documents type: string localAlias: $ref: '#/components/schemas/CreateBucket_request_localAlias' type: object UpdateBucket_request_websiteAccess: properties: enabled: example: true type: boolean indexDocument: example: index.html type: string errorDocument: example: error/400.html type: string type: object UpdateBucket_request_quotas: properties: maxSize: example: 19029801 format: int64 nullable: true type: integer maxObjects: format: int64 nullable: true type: integer example: null type: object UpdateBucket_request: properties: websiteAccess: $ref: '#/components/schemas/UpdateBucket_request_websiteAccess' quotas: $ref: '#/components/schemas/UpdateBucket_request_quotas' type: object AllowBucketKey_request_permissions: properties: read: example: true type: boolean write: example: true type: boolean owner: example: true type: boolean required: - owner - read - write type: object AllowBucketKey_request: properties: bucketId: example: e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b type: string accessKeyId: example: GK31c2f218a2e44f485b94239e type: string permissions: $ref: '#/components/schemas/AllowBucketKey_request_permissions' required: - accessKeyId - bucketId - permissions type: object KeyInfo_permissions: example: createBucket: false properties: createBucket: example: false type: boolean type: object KeyInfo_buckets_inner_permissions: example: owner: false read: true write: true properties: read: example: true type: boolean write: example: true type: boolean owner: example: false type: boolean type: object KeyInfo_buckets_inner: example: permissions: owner: false read: true write: true localAliases: - GK31c2f218a2e44f485b94239e:localname - GK31c2f218a2e44f485b94239e:localname globalAliases: - my-bucket - my-bucket id: 70dc3bed7fe83a75e46b66e7ddef7d56e65f3c02f9f80b6749fb97eccb5e1033 properties: id: example: 70dc3bed7fe83a75e46b66e7ddef7d56e65f3c02f9f80b6749fb97eccb5e1033 type: string globalAliases: items: example: my-bucket type: string type: array localAliases: items: example: GK31c2f218a2e44f485b94239e:localname type: string type: array permissions: $ref: '#/components/schemas/KeyInfo_buckets_inner_permissions' type: object BucketInfo_websiteConfig: example: indexDocument: index.html errorDocument: error/400.html nullable: true properties: indexDocument: example: index.html type: string errorDocument: example: error/400.html type: string type: object BucketInfo_quotas: example: maxSize: 0 maxObjects: 6 properties: maxSize: format: int64 nullable: true type: integer example: null maxObjects: format: int64 nullable: true type: integer example: null type: object securitySchemes: bearerAuth: scheme: bearer type: http