hashicorp/nomad · warning

Job registration, dispatch, and scale are disabled by the sc

Error message

Job registration, dispatch, and scale are disabled by the scheduler configuration

What it means

ErrJobRegistrationDisabled indicates the scheduler configuration has disabled job registration, dispatch, and scaling cluster-wide. Handlers like job register, doRegister, Scale, and Dispatch map their failures through errCodeFromHandler to this sentinel, and the HTTP layer rewrites it to a 403 (command/agent/http.go:765-766). It is a server-side policy state, not an ACL problem.

Source

Thrown at nomad/structs/errors.go:60

	errDeploymentTerminalNoFail      = "can't fail terminal deployment"
	errDeploymentTerminalNoPause     = "can't pause terminal deployment"
	errDeploymentTerminalNoPromote   = "can't promote terminal deployment"
	errDeploymentTerminalNoResume    = "can't resume terminal deployment"
	errDeploymentTerminalNoUnblock   = "can't unblock terminal deployment"
	errDeploymentTerminalNoRun       = "can't run terminal deployment"
	errDeploymentTerminalNoSetHealth = "can't set health of allocations for a terminal deployment"
	errDeploymentRunningNoUnblock    = "can't unblock running deployment"
)

var (
	ErrNoLeader                   = errors.New(errNoLeader)
	ErrNotReadyForConsistentReads = errors.New(errNotReadyForConsistentReads)
	ErrNoRegionPath               = errors.New(errNoRegionPath)
	ErrTokenNotFound              = errors.New(errTokenNotFound)
	ErrTokenExpired               = errors.New(errTokenExpired)
	ErrTokenInvalid               = errors.New(errTokenInvalid)
	ErrPermissionDenied           = errors.New(errPermissionDenied)
	ErrJobRegistrationDisabled    = errors.New(errJobRegistrationDisabled)
	ErrNoNodeConn                 = errors.New(errNoNodeConn)
	ErrUnknownMethod              = errors.New(errUnknownMethod)
	ErrUnknownNomadVersion        = errors.New(errUnknownNomadVersion)
	ErrNodeLacksRpc               = errors.New(errNodeLacksRpc)
	ErrMissingAllocID             = errors.New(errMissingAllocID)
	ErrIncompatibleFiltering      = errors.New(errIncompatibleFiltering)
	ErrMalformedChooseParameter   = errors.New(errMalformedChooseParameter)

	// ErrResultPaginatorCreation is returned by list RPC handlers when the
	// result paginator cannot be built, for example when the server cannot
	// evaluate a requested filter expression. api.ResultPaginatorErrorContent
	// duplicates its message so the CLI can match it without importing structs.
	// Keep the two in sync.
	ErrResultPaginatorCreation = errors.New(errResultPaginatorCreation)

	ErrUnknownNode = errors.New(ErrUnknownNodePrefix)

	ErrDeploymentTerminalNoCancel    = errors.New(errDeploymentTerminalNoCancel)

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Re-enable via 'nomad scheduler set-config -job-registration-enabled=true' (or update the scheduler config via API)
  2. Retry the job registration after the operator lifts the change freeze
  3. Check current state with 'nomad scheduler get-config' before deploying
  4. Avoid blanket 403-handling retries: this error will persist until config changes

Example fix

// before
# scheduler config: job_registration_enabled = false
nomad job run app.nomad  # -> 403 Job registration... disabled
// after
nomad scheduler set-config -job-registration-enabled=true
nomad job run app.nomad
Defensive patterns

Strategy: retry

Validate before calling

cfg, err := client.Operator().SchedulerGetConfiguration(nil)
if err == nil && cfg.SchedulerConfig != nil && !cfg.SchedulerConfig.JobRegistrationEnabled {
    return errors.New("job registration is disabled by scheduler config; aborting deploy")
}

Type guard

func IsJobRegistrationDisabled(err error) bool {
    return err != nil && strings.Contains(err.Error(), structs.ErrJobRegistrationDisabled.Error())
}

Try / catch

err := client.Jobs().Register(job, nil, nil)
if strings.HasSuffix(err.Error(), structs.ErrJobRegistrationDisabled.Error()) {
    // do not hot-retry; wait for operators to re-enable registration
}

Prevention

When it happens

Trigger: Calling jobs/register, job dispatch, or job scale endpoints when the region's scheduler config has JobRegistrationEnabled (or equivalent) set to false; errCodeFromHandler translating handler errors carrying this message.

Common situations: Operators setting the scheduler config to freeze changes during incident/maintenance windows (a change freeze); clusters migrated or bootstrapped with registration disabled by default; automation (CI deploys) running during such a freeze.

Related errors


AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04). Data as JSON: /api/errors/09df34f0ae5b8681. Report an issue: GitHub.