CellarCellar
SDKs

Go client

Use the Cellar Go SDK against cellar-gateway

Package: sdk/go. Auth is sent as Authorization: Bearer … and X-Api-Key.

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/prodioslabs/cellar/sdk/go"
)

func main() {
	c, err := client.NewFromEnv() // or client.New(client.Config{…})
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	sb, err := c.Create(ctx, &client.SandboxCreateRequest{
		Spec: &client.SandboxSpec{Image: "alpine:3.20"},
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("created", sb.ID())

	// Creation returns immediately (often pending). Wait until the container is running.
	if err := sb.WaitUntilReady(ctx, client.WaitUntilReadyOptions{}); err != nil {
		log.Fatal(err)
	}

	res, err := sb.Exec(ctx, []string{"uname", "-a"})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("exit=%d stdout=%s\n", res.ExitCode, res.Stdout)

	if err := sb.Remove(ctx); err != nil {
		log.Fatal(err)
	}
}

Client ops: Create, Get, List. Sandbox ops: WaitUntilReady, GetStatus, Exec, Logs, Stop, Remove, UpdateNetwork.

Network limits on NetworkPolicy: networkAllowList (IPv4 CIDRs), domainAllowList (domains / *. wildcards), blockAll, and opt-in essentialServices. At most one of networkAllowList / domainAllowList / blockAll may be set; they translate to canonical mode/rules/dns server-side.

See configure the client for environment variables.