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-go

Um 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ávelCampoPadrão
YET_API_KEYAPIKey—
YET_BASE_DOMAINBaseDomainyet.com.br
YET_CLOUD_URLCloudURLhttps://cloud.<base>
YET_WORKSPACE_URLWorkspaceURLhttps://<company>.<base>

Produto por produto

O client tem um campo por produto, e um serviço por coisa dentro dele:

ProdutoServiços
client.SettingsWorkspace, People, Apps
client.IAMAccess, Keys, Activity
client.CloudRacks, 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.