aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorQuentin Dufour <quentin@deuxfleurs.fr>2023-11-28 16:18:28 +0100
committerQuentin Dufour <quentin@deuxfleurs.fr>2023-11-28 16:18:28 +0100
commit80886906507ba12586874ec66ef683139108cbcf (patch)
treee5c1d302bb01bbaa9313927183b9a3917b5baf33 /doc
parent3908619eac7c46c0d1b065adb4b79db798bc8d22 (diff)
downloadgarage-80886906507ba12586874ec66ef683139108cbcf.tar.gz
garage-80886906507ba12586874ec66ef683139108cbcf.zip
fix the docapi-v1
Diffstat (limited to 'doc')
-rw-r--r--doc/book/build/golang.md82
-rw-r--r--doc/book/build/javascript.md4
-rw-r--r--doc/book/build/python.md11
-rw-r--r--doc/book/reference-manual/admin-api.md11
4 files changed, 84 insertions, 24 deletions
diff --git a/doc/book/build/golang.md b/doc/book/build/golang.md
index a508260e..f3f28a40 100644
--- a/doc/book/build/golang.md
+++ b/doc/book/build/golang.md
@@ -37,30 +37,84 @@ import (
"context"
"fmt"
"os"
+ "strings"
garage "git.deuxfleurs.fr/garage-sdk/garage-admin-sdk-golang"
)
func main() {
- // Set Host and other parameters
+ // Initialization
configuration := garage.NewConfiguration()
configuration.Host = "127.0.0.1:3903"
-
-
- // We can now generate a client
client := garage.NewAPIClient(configuration)
-
- // Authentication is handled through the context pattern
ctx := context.WithValue(context.Background(), garage.ContextAccessToken, "s3cr3t")
- // Send a request
- resp, r, err := client.NodesApi.GetNodes(ctx).Execute()
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error when calling `NodesApi.GetNodes``: %v\n", err)
- fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
+ // Nodes
+ fmt.Println("--- nodes ---")
+ nodes, _, _ := client.NodesApi.GetNodes(ctx).Execute()
+ fmt.Fprintf(os.Stdout, "First hostname: %v\n", nodes.KnownNodes[0].Hostname)
+ capa := int64(1000000000)
+ change := []garage.NodeRoleChange{
+ garage.NodeRoleChange{NodeRoleUpdate: &garage.NodeRoleUpdate {
+ Id: *nodes.KnownNodes[0].Id,
+ Zone: "dc1",
+ Capacity: *garage.NewNullableInt64(&capa),
+ Tags: []string{ "fast", "amd64" },
+ }},
}
-
- // Process the response
- fmt.Fprintf(os.Stdout, "Target hostname: %v\n", resp.KnownNodes[resp.Node].Hostname)
+ staged, _, _ := client.LayoutApi.AddLayout(ctx).NodeRoleChange(change).Execute()
+ msg, _, _ := client.LayoutApi.ApplyLayout(ctx).LayoutVersion(*garage.NewLayoutVersion(staged.Version + 1)).Execute()
+ fmt.Printf(strings.Join(msg.Message, "\n")) // Layout configured
+
+ health, _, _ := client.NodesApi.GetHealth(ctx).Execute()
+ fmt.Printf("Status: %s, nodes: %v/%v, storage: %v/%v, partitions: %v/%v\n", health.Status, health.ConnectedNodes, health.KnownNodes, health.StorageNodesOk, health.StorageNodes, health.PartitionsAllOk, health.Partitions)
+
+ // Key
+ fmt.Println("\n--- key ---")
+ key := "openapi-key"
+ keyInfo, _, _ := client.KeyApi.AddKey(ctx).AddKeyRequest(garage.AddKeyRequest{Name: *garage.NewNullableString(&key) }).Execute()
+ defer client.KeyApi.DeleteKey(ctx).Id(*keyInfo.AccessKeyId).Execute()
+ fmt.Printf("AWS_ACCESS_KEY_ID=%s\nAWS_SECRET_ACCESS_KEY=%s\n", *keyInfo.AccessKeyId, *keyInfo.SecretAccessKey.Get())
+
+ id := *keyInfo.AccessKeyId
+ canCreateBucket := true
+ updateKeyRequest := *garage.NewUpdateKeyRequest()
+ updateKeyRequest.SetName("openapi-key-updated")
+ updateKeyRequest.SetAllow(garage.UpdateKeyRequestAllow { CreateBucket: &canCreateBucket })
+ update, _, _ := client.KeyApi.UpdateKey(ctx).Id(id).UpdateKeyRequest(updateKeyRequest).Execute()
+ fmt.Printf("Updated %v with key name %v\n", *update.AccessKeyId, *update.Name)
+
+ keyList, _, _ := client.KeyApi.ListKeys(ctx).Execute()
+ fmt.Printf("Keys count: %v\n", len(keyList))
+
+ // Bucket
+ fmt.Println("\n--- bucket ---")
+ global_name := "global-ns-openapi-bucket"
+ local_name := "local-ns-openapi-bucket"
+ bucketInfo, _, _ := client.BucketApi.CreateBucket(ctx).CreateBucketRequest(garage.CreateBucketRequest{
+ GlobalAlias: &global_name,
+ LocalAlias: &garage.CreateBucketRequestLocalAlias {
+ AccessKeyId: keyInfo.AccessKeyId,
+ Alias: &local_name,
+ },
+ }).Execute()
+ defer client.BucketApi.DeleteBucket(ctx).Id(*bucketInfo.Id).Execute()
+ fmt.Printf("Bucket id: %s\n", *bucketInfo.Id)
+
+ updateBucketRequest := *garage.NewUpdateBucketRequest()
+ website := garage.NewUpdateBucketRequestWebsiteAccess()
+ website.SetEnabled(true)
+ website.SetIndexDocument("index.html")
+ website.SetErrorDocument("errors/4xx.html")
+ updateBucketRequest.SetWebsiteAccess(*website)
+ quotas := garage.NewUpdateBucketRequestQuotas()
+ quotas.SetMaxSize(1000000000)
+ quotas.SetMaxObjects(999999999)
+ updateBucketRequest.SetQuotas(*quotas)
+ updatedBucket, _, _ := client.BucketApi.UpdateBucket(ctx).Id(*bucketInfo.Id).UpdateBucketRequest(updateBucketRequest).Execute()
+ fmt.Printf("Bucket %v website activation: %v\n", *updatedBucket.Id, *updatedBucket.WebsiteAccess)
+
+ bucketList, _, _ := client.BucketApi.ListBuckets(ctx).Execute()
+ fmt.Printf("Bucket count: %v\n", len(bucketList))
}
```
diff --git a/doc/book/build/javascript.md b/doc/book/build/javascript.md
index ff009ffe..a065c595 100644
--- a/doc/book/build/javascript.md
+++ b/doc/book/build/javascript.md
@@ -31,9 +31,9 @@ npm install --save git+https://git.deuxfleurs.fr/garage-sdk/garage-admin-sdk-js.
A short example:
```javascript
-const garage = require('garage_administration_api_v0garage_v0_8_0');
+const garage = require('garage_administration_api_v1garage_v0_9_0');
-const api = new garage.ApiClient("http://127.0.0.1:3903/v0");
+const api = new garage.ApiClient("http://127.0.0.1:3903/v1");
api.authentications['bearerAuth'].accessToken = "s3cr3t";
const [node, layout, key, bucket] = [
diff --git a/doc/book/build/python.md b/doc/book/build/python.md
index 5b797897..896c99d3 100644
--- a/doc/book/build/python.md
+++ b/doc/book/build/python.md
@@ -80,7 +80,7 @@ from garage_admin_sdk.apis import *
from garage_admin_sdk.models import *
configuration = garage_admin_sdk.Configuration(
- host = "http://localhost:3903/v0",
+ host = "http://localhost:3903/v1",
access_token = "s3cr3t"
)
@@ -94,13 +94,14 @@ print(f"running garage {status.garage_version}, node_id {status.node}")
# Change layout of this node
current = layout.get_layout()
-layout.add_layout({
- status.node: NodeClusterInfo(
+layout.add_layout([
+ NodeRoleChange(
+ id = status.node,
zone = "dc1",
- capacity = 1,
+ capacity = 1000000000,
tags = [ "dev" ],
)
-})
+])
layout.apply_layout(LayoutVersion(
version = current.version + 1
))
diff --git a/doc/book/reference-manual/admin-api.md b/doc/book/reference-manual/admin-api.md
index 6932ac60..15630788 100644
--- a/doc/book/reference-manual/admin-api.md
+++ b/doc/book/reference-manual/admin-api.md
@@ -13,8 +13,11 @@ We will bump the version numbers prefixed to each API endpoint at each time the
or semantics change, meaning that code that relies on these endpoint will break
when changes are introduced.
-The Garage administration API was introduced in version 0.7.2, this document
-does not apply to older versions of Garage.
+Versions:
+ - Before Garage 0.7.2 - no admin API
+ - Garage 0.7.2 - admin APIv0
+ - Garage 0.9.0 - admin APIv1, deprecate admin APIv0
+
## Access control
@@ -131,7 +134,9 @@ $ curl -so /dev/null -w "%{http_code}" http://localhost:3903/check?domain=exampl
### Cluster operations
-These endpoints are defined on a dedicated [Redocly page](https://garagehq.deuxfleurs.fr/api/garage-admin-v0.html). You can also download its [OpenAPI specification](https://garagehq.deuxfleurs.fr/api/garage-admin-v0.yml).
+These endpoints have a dedicated OpenAPI spec.
+ - APIv1 - [HTML spec](https://garagehq.deuxfleurs.fr/api/garage-admin-v1.html) - [OpenAPI YAML](https://garagehq.deuxfleurs.fr/api/garage-admin-v1.yml)
+ - APIv0 (deprecated) - [HTML spec](https://garagehq.deuxfleurs.fr/api/garage-admin-v0.html) - [OpenAPI YAML](https://garagehq.deuxfleurs.fr/api/garage-admin-v0.yml)
Requesting the API from the command line can be as simple as running: