Docs/Controlplane/HashiCorp Nomad
Open

Reading1 min
Updated31 Jul 2026
Sourcev1/providers/nomad.mdx

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

Status01

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

Configuration02

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

Capabilities03

CapabilitySupported
provisionYes
deployYes
scaleYes
logsYes
execYes
rollingYes
canaryYes
volumesVia CSI plugins

Resource mapping04

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 works05

  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 use06

  • 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