Skip to content

SwarmCracker API Reference

gRPC API protocol between swarmd-firecracker and swarmcracker CLI / swarmctl.


Overview

SwarmCracker uses SwarmKit's gRPC API via the github.com/moby/swarmkit/v2/api package, extended with a custom API versioning protocol (pkg/apiversion).

┌──────────────────┐       Unix Socket       ┌────────────────────────┐
│  swarmcracker    │ ───── gRPC (TLS) ────── │  swarmd-firecracker    │
│  swarmctl        │   /var/run/swarmkit/     │  (manager/worker)      │
│                  │       swarm.sock         │                        │
└────────┬─────────┘                          └───────────┬────────────┘
         │                                                 │
         │  X-SwarmCracker-Version: 1                       │
         │  (gRPC metadata interceptor)                     │
         └─────────────────────────────────────────────────┘

Connection

Control Socket

Parameter Value
Socket path /var/run/swarmkit/swarm.sock
State directory /var/lib/swarmkit
Transport Unix socket + TLS
Certificates Auto-generated by SwarmKit CA

Connecting (Go)

import (
    "github.com/moby/swarmkit/v2/api"
    "github.com/restuhaqza/swarmcracker/pkg/apiversion"
    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials"
)

// Load TLS certificates from state dir
tlsConfig := loadTLSConfig("/var/lib/swarmkit")

conn, err := grpc.Dial(
    "unix:///var/run/swarmkit/swarm.sock",
    grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig)),
    apiversion.WithVersion(), // Injects X-SwarmCracker-Version metadata
)
client := api.NewControlClient(conn)

API Versioning

SwarmCracker extends SwarmKit with a gRPC unary client interceptor that injects metadata into every outgoing RPC.

Protocol

Header Value Description
x-swarmcracker-version "1" Current API version

Client Side

import "github.com/restuhaqza/swarmcracker/pkg/apiversion"

// Option 1: Use convenience function
conn, err := apiversion.DialUnix(socketPath, tlsConfig)

// Option 2: Add interceptor manually
conn, err := grpc.Dial(addr,
    grpc.WithTransportCredentials(creds),
    apiversion.WithVersion(),
)

Server Side

import "github.com/restuhaqza/swarmcracker/pkg/apiversion"

func handleRequest(ctx context.Context) {
    // Extract client version from incoming metadata
    if err := apiversion.ValidateVersion(ctx, "1"); err != nil {
        return status.Error(codes.FailedPrecondition, err.Error())
    }
    // Proceed...
}

Version History

Version Release Changes
1 v0.8.0+ Initial schema — all v0.x releases share this version
(empty) pre-v0.8.0 Pre-versioning clients — treated as compatible

SwarmKit Services Used

SwarmCracker leverages the following SwarmKit gRPC services via api.ControlClient:

Cluster Management

RPC Request Response Description
ListClusters ListClustersRequest ListClustersResponse List all clusters (used for token generation)
GetCluster GetClusterRequest GetClusterResponse Get cluster details

Node Management

RPC Request Response Description
ListNodes ListNodesRequest ListNodesResponse List all nodes with status
GetNode GetNodeRequest GetNodeResponse Get node details
UpdateNode UpdateNodeRequest UpdateNodeResponse Update node labels/spec

Service Management

RPC Request Response Description
CreateService CreateServiceRequest CreateServiceResponse Deploy a new service
UpdateService UpdateServiceRequest UpdateServiceResponse Update existing service
RemoveService RemoveServiceRequest RemoveServiceResponse Remove a service
ListServices ListServicesRequest ListServicesResponse List all services
GetService GetServiceRequest GetServiceResponse Get service details
InspectService — — (via swarmctl)

Task Management

RPC Request Response Description
ListTasks ListTasksRequest ListTasksResponse List tasks with optional filters
GetTask GetTaskRequest GetTaskResponse Get individual task details

Secret & Config Management

RPC Request Response Description
CreateSecret CreateSecretRequest CreateSecretResponse Store a secret
GetSecret GetSecretRequest GetSecretResponse Retrieve a secret
ListSecrets ListSecretsRequest ListSecretsResponse List all secrets
RemoveSecret RemoveSecretRequest RemoveSecretResponse Delete a secret
CreateConfig CreateConfigRequest CreateConfigResponse Store config data
GetConfig GetConfigRequest GetConfigResponse Retrieve config data
ListConfigs ListConfigsRequest ListConfigsResponse List all configs
RemoveConfig RemoveConfigRequest RemoveConfigResponse Delete a config

Network Management

RPC Request Response Description
CreateNetwork CreateNetworkRequest CreateNetworkResponse Create overlay network
ListNetworks ListNetworksRequest ListNetworksResponse List all networks
GetNetwork GetNetworkRequest GetNetworkResponse Get network details
RemoveNetwork RemoveNetworkRequest RemoveNetworkResponse Delete a network

Custom Types

Executor Task Spec

The SwarmKit TaskSpec runtime is used to encode Firecracker-specific configuration:

// SwarmKit container spec is converted to SwarmCracker types:
type Container struct {
    Image   string
    Command []string
    Args    []string
    Env     []string
    Mounts  []Mount
}

type Mount struct {
    Target   string
    Source   string
    ReadOnly bool
}

type NetworkAttachment struct {
    Network   Network
    Addresses []string
}

type SecretRef struct {
    ID     string // Secret ID from manager
    Name   string // Secret name
    Target string // Mount path in VM
    Data   []byte // Fetched by agent from manager
}

type ConfigRef struct {
    ID     string
    Name   string
    Target string
    Data   []byte
}

Health Check API

The daemon exposes a local HTTP health endpoint for monitoring:

Attribute Value
Bind address 127.0.0.1:8080
Endpoint GET /healthz
Rate limit 10 req/s per client
Request timeout 5s

Response

{
    "status": "healthy",
    "timestamp": "2026-06-26T23:00:00Z",
    "checks": {
        "kvm": true,
        "firecracker": true,
        "bridge": true,
        "consul": true
    }
}

Firecracker Machine Config API

Each Firecracker microVM exposes a local HTTP API on its socket:

Attribute Value
Path /var/run/firecracker/<task-id>/api.sock
Endpoint GET /machine-config
Endpoint GET / (info)
Protocol HTTP via Unix socket

Used by swarmctl for VM introspection and the executor for lifecycle management.


Code Locations

Component Path
API versioning pkg/apiversion/
gRPC client helpers cmd/swarmcracker/token_helper.go
gRPC service handlers cmd/swarmd-firecracker/main.go
SwarmKit types github.com/moby/swarmkit/v2/api
Executor bridge pkg/swarmkit/executor.go (SwarmKit → Firecracker translation)
CNI network allocator pkg/cni/allocator.go
Network discovery pkg/network/discovery.go

See Also