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

  1. Remove the scheduler_configuration block from your node_pool definitions
  2. Upgrade to Nomad Enterprise with a license covering Node Pools Governance
  3. 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

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


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