{"record":{"id":"0ef79e033b7384ed","repo":"hashicorp/nomad","slug":"node-pools-governance-is-unlicensed","errorCode":null,"errorMessage":"Node Pools Governance is unlicensed.","messagePattern":"Node Pools Governance is unlicensed\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nomad/structs/node_pool_ce.go","lineNumber":14,"sourceCode":"// Copyright IBM Corp. 2015, 2026\n// SPDX-License-Identifier: BUSL-1.1\n\n//go:build !ent\n\npackage structs\n\nimport \"errors\"\n\n// Validate returns an error if the node pool scheduler configuration is\n// invalid.\nfunc (n *NodePoolSchedulerConfiguration) Validate() error {\n\tif n != nil {\n\t\treturn errors.New(\"Node Pools Governance is unlicensed.\")\n\t}\n\treturn nil\n}\n","sourceCodeStart":1,"sourceCodeEnd":18,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/nomad/structs/node_pool_ce.go#L1-L18","documentation":"Nomad's NodePoolSchedulerConfiguration.Validate rejects any non-nil scheduler configuration because 'Node Pools Governance' is a licensed (Enterprise) feature; the open-source build refuses all node pool scheduler configuration. A non-nil NodePoolSchedulerConfiguration on a node pool means the feature is in use, so validation fails unconditionally.","triggerScenarios":"Creating or updating a node pool (nomad node pool apply or job node_pool stanza) with a scheduler_configuration block set on an unlicensed Nomad OSS binary.","commonSituations":"Running OSS Nomad after migrating configs from Nomad Enterprise; HCL job files copied from an Enterprise environment that include a scheduler_configuration block; automation applying node pools with default config structs non-nil.","solutions":["Remove the scheduler_configuration block from the node pool definition","Upgrade to a Nomad Enterprise license that includes Node Pools Governance","Apply the node pool with an empty/nil scheduler configuration"],"exampleFix":"// before (HCL)\nnode {\n  node_pool = \"prod\"\n  scheduler_configuration {\n    scheduler_algorithm = \"spread\"\n  }\n}\n// after\nnode {\n  node_pool = \"prod\"\n}","handlingStrategy":"validation","validationCode":"if pool.SchedulerConfiguration != nil {\n    return fmt.Errorf(\"node pool %q sets scheduler_configuration, which requires a Nomad Enterprise license\", pool.Name)\n}","typeGuard":"func hasSchedulerConfig(n *structs.NodePoolSchedulerConfiguration) bool { return n != nil }","tryCatchPattern":null,"preventionTips":["Keep node pool definitions minimal on OSS Nomad","Audit job/node-pool HCL for enterprise-only stanzas before applying","Use nomad node pool inspect / validate before apply","Separate Enterprise and OSS config repositories"],"tags":["nomad","licensing","node-pool","validation"],"backgroundTag":"feature-unlicensed","analyzedSha":"482b49bf1aec006f089bcfc7e632d8f6ac303e5e","analyzedAt":"2026-09-04T07:54:14.808Z","contentChangedAt":"2026-09-04T07:54:14.808Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}