Ctrl Plane

HashiCorp Nomad

Workload orchestration using HashiCorp Nomad jobs.

The Nomad provider deploys Ctrl Plane instances as Nomad jobs, supporting Docker, exec, and other Nomad task drivers.

Status

Interface defined — the package structure exists at provider/nomad and implements the provider.Provider interface. Full implementation is in progress.

Configuration

import "github.com/xraph/ctrlplane/provider/nomad"

prov, err := nomad.New(nomad.Config{
    Address:   "http://nomad.service.consul:4646",
    Token:     os.Getenv("NOMAD_TOKEN"),
    Region:    "global",
    Namespace: "default",
    Datacenter: "dc1",
})
FieldEnvDefaultDescription
AddressCP_NOMAD_ADDRhttp://127.0.0.1:4646Nomad API address
TokenCP_NOMAD_TOKENACL token for authentication
RegionCP_NOMAD_REGIONglobalNomad region
NamespaceCP_NOMAD_NAMESPACEdefaultNomad namespace
DatacenterCP_NOMAD_DATACENTERdc1Target datacenter

Capabilities

CapabilitySupported
provisionYes
deployYes
scaleYes
logsYes
execYes
rollingYes
canaryYes
volumesVia CSI plugins

Resource mapping

Ctrl Plane conceptNomad resource
InstanceJob (service type)
Environment variablesTask env block
PortsNetwork port mapping
Resources (CPU/Memory)Task resources block
Health checksService check stanza
ScalingTask group count
Canary deployUpdate stanza with canary

How it works

  1. Provision creates a Nomad service job with a Docker task driver.
  2. Deploy updates the job specification with the new image and triggers a deployment.
  3. Scale adjusts the task group count.
  4. Canary deployments use Nomad's native canary support in the update stanza.
  5. Logs streams from the Nomad allocation filesystem.
  6. Exec uses the Nomad alloc exec API.

When to use

  • Teams using the HashiCorp ecosystem (Consul, Vault, Nomad)
  • Mixed workloads (containers, JVM, binaries) on the same scheduler
  • Environments where Kubernetes is too heavyweight
  • Multi-datacenter deployments with Nomad federation

On this page