SDKs
SDK Go
yet-sdk-go: um client tipado para todos os produtos da sua empresa. A CLI e o provider Terraform são construídos sobre ele.Instalação
bash
go get github.com/yetcombr/yet-sdk-goUm client
Um client guarda uma API key e encontra os endereços da sua empresa a partir dela:
main.go
package main
import (
"context"
"fmt"
"log"
"os"
yet "github.com/yetcombr/yet-sdk-go"
)
func main() {
client, err := yet.New(yet.Config{APIKey: os.Getenv("YET_API_KEY")})
if err != nil {
log.Fatal(err)
}
envs, err := client.Cloud.Environments.List(context.Background())
if err != nil {
log.Fatal(err)
}
for _, e := range envs {
fmt.Println(e.Name, e.Domain)
}
}yet.ConfigFromEnv() lê o mesmo do ambiente — o que a CLI e o provider usam quando nada é dito:
| Variável | Campo | Padrão |
|---|---|---|
YET_API_KEY | APIKey | — |
YET_BASE_DOMAIN | BaseDomain | yet.com.br |
YET_CLOUD_URL | CloudURL | https://cloud.<base> |
YET_WORKSPACE_URL | WorkspaceURL | https://<company>.<base> |
Produto por produto
O client tem um campo por produto, e um serviço por coisa dentro dele:
| Produto | Serviços |
|---|---|
client.Settings | Workspace, People, Apps |
client.IAM | Access, Keys, Activity |
client.Cloud | Racks, Servers, Runtimes, Pools, Environments, Namespaces, Applications, Databases, DNS |
Settings
go
people, members, err := client.Settings.People.List(ctx)
email, err := client.Settings.People.Add(ctx, yet.NewPerson{
FullName: "Ana Costa",
Via: "password",
Password: password,
Mailbox: &yet.Mailbox{Name: "ana", Domains: []string{"acme.dev"}},
})
err = client.Settings.Apps.SetOff(ctx, []string{"sketch"})Cloud
go
server, err := client.Cloud.Servers.Create(ctx, "box", "")
join, err := client.Cloud.Servers.Join(ctx, server.ID)
fmt.Println(join.Command) // run it on the machine
db, err := client.Cloud.Databases.Create(ctx, "postgres", "orders", env.ID)
release, deployment, err := client.Cloud.Applications.Release(ctx, app.ID, "ghcr.io/acme/api:1.4.0")Campos que uma mudança pode deixar como estão são ponteiros: nil mantém, um valor define.
go
replicas := 3
_, err := client.Cloud.Applications.Update(ctx, app.ID, yet.ApplicationInput{Replicas: &replicas})Erros
Uma recusa é um *yet.Error, com as palavras do próprio Yet em Message. yet.IsNotFound e yet.IsConflict separam as mais comuns:
go
env, err := client.Cloud.Environments.Get(ctx, id)
switch {
case yet.IsNotFound(err):
// gone
case err != nil:
var e *yet.Error
if errors.As(err, &e) {
log.Printf("%d: %s", e.StatusCode, e.Message)
}
}O SDK tem versão própria, em SemVer. Enquanto abaixo de 1.0, uma versão minor pode mudar o que ele expõe; o CHANGELOG dele diz como.