hashicorp/nomad · error
Multiregion jobs are unlicensed.
Error message
Multiregion jobs are unlicensed.
What it means
Multiregion.Validate in the CE build returns "Multiregion jobs are unlicensed." whenever a job carries a non-nil multiregion stanza. Multiregion deployments (running one job spec across multiple regions/federated clusters) are an Enterprise-only feature; the OSS binary rejects the stanza at job validation time.
Source
Thrown at nomad/structs/structs_ce.go:46
func (n *NamespaceVaultConfiguration) Validate() error {
if n != nil {
return errors.New("Multi-Cluster Vault is unlicensed.")
}
return nil
}
func (n *NamespaceConsulConfiguration) Canonicalize() {}
func (n *NamespaceConsulConfiguration) Validate() error {
if n != nil {
return errors.New("Multi-Cluster Consul is unlicensed.")
}
return nil
}
func (m *Multiregion) Validate(jobType string, jobDatacenters []string) error {
if m != nil {
return errors.New("Multiregion jobs are unlicensed.")
}
return nil
}
func (p *ScalingPolicy) validateType() multierror.Error {
var mErr multierror.Error
// Check policy type and target
switch p.Type {
case ScalingPolicyTypeHorizontal:
targetErr := p.validateTargetHorizontal()
mErr.Errors = append(mErr.Errors, targetErr.Errors...)
default:
mErr.Errors = append(mErr.Errors, fmt.Errorf(`scaling policy type "%s" is not valid`, p.Type))
}
return mErrView on GitHub (pinned to 482b49bf1a)
Solutions
- Remove the multiregion stanza and submit the job to each region individually as a single-region job.
- Upgrade to Nomad Enterprise and apply a license that includes multiregion deployments.
- If the stanza is accidentally included by templates, strip it before submission (e.g. hcl2 jobs without multiregion).
Example fix
// before (HCL)
job "app" {
multiregion { region "global" { datacenters = ["dc1"] } }
}
// after
job "app" {
datacenters = ["dc1"]
} Defensive patterns
Strategy: validation
Validate before calling
if job.Multiregion != nil {
return errors.New("multiregion jobs require Nomad Enterprise")
} Type guard
func multiregionLicensed(j *structs.Job) bool { return j == nil || j.Multiregion == nil } Try / catch
if err := job.Validate(); err != nil && strings.Contains(err.Error(), "unlicensed") {
job.Multiregion = nil // resubmit as a single-region job
} Prevention
- Keep multiregion job files separate from OSS deployment pipelines
- Run `nomad job validate` against the target cluster before `job run`
- Split multiregion specs into per-region single-region jobs for OSS
When it happens
Trigger: Submitting a job containing a top-level multiregion { ... } stanza (nomad job run / POST /v1/jobs) to a community-edition agent; job plan/validate endpoints also surface it.
Common situations: Copying an Enterprise example job file into an OSS cluster; automation generated for a multi-region Enterprise deployment being run against a dev OSS agent; license expired so agent downgraded behavior.
Related errors
- Feature "Node Pools Governance" is unlicensed
- Node Pools Governance is unlicensed.
- Multi-Cluster Vault is unlicensed.
- Multi-Cluster Consul is unlicensed.
- ErrMultipleNamespaces
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/734e58c817b661e4.
Report an issue: GitHub.