Nomad Skill
Orchestrate workloads with the HashiCorp Nomad CLI.
Requirements
nomadCLI installedNOMAD_ADDRenvironment variable (default: http://127.0.0.1:4646)NOMAD_TOKENif ACLs are enabled
Jobs
List & Status
nomad job status # List all jobs
nomad job status <job-id> # Job details
nomad job status -verbose <job-id> # Detailed info
Run & Stop
nomad job run job.nomad.hcl # Deploy job
nomad job run -check-index=X job.hcl # Deploy only if index matches
nomad job plan job.nomad.hcl # Dry-run, show changes
nomad job stop <job-id> # Stop job (leaves history)
nomad job stop -purge <job-id> # Stop and remove completely
Scale
nomad job scale <job-id> <group> 5 # Scale to 5 instances
nomad job scale -detach <job-id> <group> 3
Dispatch (Parameterized Jobs)
nomad job dispatch <job-id>
nomad job dispatch -meta key=value <job-id>
nomad job dispatch -meta key=value <job-id> @payload.json
History & Versions
nomad job history <job-id>
nomad job revert <job-id> <version>
nomad job deployments <job-id>
Inspect
nomad job inspect <job-id> # Full job spec JSON
nomad job validate job.nomad.hcl # Validate syntax
Allocations
nomad job allocs <job-id> # List job allocations
nomad alloc status <alloc-id> # Allocation details
nomad alloc status -short <alloc-id> # Summary only
Logs
nomad alloc logs <alloc-id> # stdout
nomad alloc logs -stderr <alloc-id> # stderr
nomad alloc logs -f <alloc-id> # Follow
nomad alloc logs -tail -n 100 <alloc-id>
nomad alloc logs -job <job-id> # Latest alloc logs
nomad alloc logs <alloc-id> <task> # Specific task
Exec
nomad alloc exec <alloc-id> /bin/sh
nomad alloc exec -task <task> <alloc-id> /bin/sh
nomad alloc exec -i -t <alloc-id> /bin/bash
Files
nomad alloc fs <alloc-id> # List /
nomad alloc fs <alloc-id> /alloc/logs/ # List directory
nomad alloc fs -stat <alloc-id> /path # File metadata
nomad alloc fs -tail -f <alloc-id> /alloc/logs/app.stdout.0
Actions
nomad alloc stop <alloc-id> # Stop allocation
nomad alloc restart <alloc-id> # Restart all tasks
nomad alloc restart -task web <alloc-id> # Restart specific task
nomad alloc signal -s SIGHUP <alloc-id> # Send signal
Nodes
nomad node status # List nodes
nomad node status <node-id> # Node details
nomad node status -allocs <node-id> # Show allocations
nomad node status -verbose <node-id> # Full details
Node Management
nomad node drain -enable <node-id> # Drain for maintenance
nomad node drain -disable <node-id> # Stop draining
nomad node eligibility -enable <node-id> # Allow scheduling
nomad node eligibility -disable <node-id> # Prevent scheduling
Deployments
nomad deployment list
nomad deployment status <deployment-id>
nomad deployment promote <deployment-id> # Promote canary
nomad deployment fail <deployment-id> # Mark failed
nomad deployment pause <deployment-id>
nomad deployment resume <deployment-id>
Evaluations
nomad eval list
nomad eval status <eval-id>
Services
nomad service list
nomad service info <service-name>
nomad service delete <service-name> # Force delete
Namespaces
nomad namespace list
nomad namespace status <name>
nomad namespace apply -description "Prod" production
nomad namespace delete <name>
Variables
nomad var list
nomad var get <path>
nomad var put <path> key=value key2=value2
nomad var put <path> @data.json
nomad var purge <path>
ACLs
nomad acl policy list
nomad acl policy info <name>
nomad acl token list
nomad acl token self # Current token info
Cluster
nomad server members # Raft cluster
nomad operator raft list-peers # Raft peers
nomad agent-info # Local agent info
nomad operator snapshot save backup.snap
nomad operator snapshot restore backup.snap
JSON Output
Add -json to most commands:
nomad job status -json
nomad node status -json
nomad alloc status -json <alloc-id>
Filtering
Use -filter with expressions:
nomad job status -filter='Status == "running"'
nomad node status -filter='Status == "ready"'
nomad job allocs -filter='ClientStatus == "failed"' <job-id>
Common Patterns
Logs from latest allocation
nomad alloc logs $(nomad job allocs -json <job> | jq -r '.[0].ID')
Find failed allocations
nomad job allocs <job-id> | grep -i failed
nomad eval list -filter='Status == "blocked"'
Quick restart
nomad job stop <job-id> && nomad job run job.nomad.hcl
Force new deployment
nomad job run -force job.nomad.hcl
Exec into running container
ALLOC=$(nomad job allocs -json <job> | jq -r '.[0].ID')
nomad alloc exec -i -t $ALLOC /bin/sh
Watch deployment
nomad deployment status -monitor <deployment-id>
Scale to zero and back
nomad job scale <job-id> <group> 0
nomad job scale <job-id> <group> 3
Environment Variables
NOMAD_ADDR— API address (default: http://127.0.0.1:4646)NOMAD_TOKEN— ACL tokenNOMAD_NAMESPACE— Default namespaceNOMAD_REGION— Default regionNOMAD_CACERT/NOMAD_CLIENT_CERT/NOMAD_CLIENT_KEY— TLS configNOMAD_TLS_SERVER_NAME— TLS server name for verification
Tips
- Use
nomad-tuifor interactive cluster management - Use
-monitorflag with deployments to watch progress - Prefix alloc IDs work (e.g.,
nomad alloc logs abc123if unique) -detachreturns immediately without waiting-verboseadds scheduling info and constraint details