hashicorp/nomad · error
Feature "Node Pools Governance" is unlicensed
Error message
Feature "Node Pools Governance" is unlicensed
What it means
Nomad's Node Pools Governance feature (attaching a SchedulerConfiguration to a NodePool) is Enterprise-only. validateLicense rejects any NodePool whose SchedulerConfiguration is non-nil when the feature is unlicensed, so the RPC (List, GetNodePool, UpsertNodePools, DeleteNodePools) fails. This is an intentional license gate, not a bug.
Source
Thrown at nomad/node_pool_endpoint_ce.go:16
// Copyright IBM Corp. 2015, 2026
// SPDX-License-Identifier: BUSL-1.1
//go:build !ent
package nomad
import (
"errors"
"github.com/hashicorp/nomad/nomad/structs"
)
func (n *NodePool) validateLicense(pool *structs.NodePool) error {
if pool != nil && pool.SchedulerConfiguration != nil {
return errors.New(`Feature "Node Pools Governance" is unlicensed`)
}
return nil
}
View on GitHub (pinned to 482b49bf1a)
Solutions
- Remove the scheduler_configuration block from your node_pool definitions
- Upgrade to Nomad Enterprise with a license covering Node Pools Governance
- Stop relying on SchedulerConfiguration on node pools; configure scheduler settings globally via the /v1/operator/scheduler/configuration endpoint instead
Example fix
// before (HCL)
node_pool "prod" {
scheduler_configuration {
scheduler_algorithm = "spread"
}
}
// after
node_pool "prod" {
description = "production pool"
} Defensive patterns
Strategy: validation
Validate before calling
// Remove enterprise-only fields before calling the API
if pool.SchedulerConfiguration != nil {
pool.SchedulerConfiguration = nil
}
client.NodePools().Upsert(pool, nil) Type guard
func isGovernanceCapable(p *api.NodePool) bool {
return p != nil && p.SchedulerConfiguration == nil
} Prevention
- Keep CE and Ent node pool HCL templates separate
- Filter node pool payloads to CE-supported fields
- Test IaC against a CE cluster if that is the deployment target
When it happens
Trigger: Calling NodePool List/GetNodePool/UpsertNodePools/DeleteNodePools against a Nomad CE (or unlicensed Ent) cluster while the NodePool object carries a SchedulerConfiguration field (typically a policy override target).
Common situations: Infrastructure-as-code written for Nomad Enterprise applied to a Community Edition cluster; upgrading tooling that newly sets scheduler_configuration; testing enterprise features locally without a license.
Related errors
- Node Pools Governance is unlicensed.
- Multi-Cluster Vault is unlicensed.
- Multi-Cluster Consul is unlicensed.
- Multiregion jobs are unlicensed.
- missing node pool name
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/449f701b4abe9e57.
Report an issue: GitHub.