Nomad v2.0.7 Release Notes: What Changed and How to Upgrade
Nomad v2.0.7 brings wildcard namespace workload identity for native services, federation replication fixes, and more bug fixes.
Infrastructure as Code
Nomad v2.1.0 adds an experimental batch job queue, tightens server-join ACLs, removes legacy retry_join config, and more. Full upgrade guide.
HashiCorp released Nomad v2.1.0, following v2.0.7. This release introduces an experimental batch job queue for node pools, tightens the ACL permissions required to manage server membership, and removes configuration fields that have been deprecated for several releases. Two breaking changes require action before upgrading production clusters. Full notes: github.com/hashicorp/nomad/releases/tag/v2.1.0.
Node pools can now be configured with a batch job queue that controls how pending batch jobs are scheduled when resources are constrained. Two queuing strategies are available:
The release notes mark this feature as experimental and do not publish the final HCL schema. Treat the following as illustrative only and confirm exact field names against the official node pool documentation before relying on it in production:
# Illustrative only — verify exact schema in Nomad docs before use
node_pool "batch-workers" {
description = "Pool dedicated to batch workloads"
# Experimental batch queue configuration (GH-28674)
# queue_algorithm = "fifo" # or "dynamic_priority"
}If batch workloads are latency-sensitive or resource contention is already a problem on shared pools, this is worth testing in a non-production namespace once the schema is finalized.
optional() on Object-Typed Variables (GH-28424)Nomad's HCL2 jobspec now supports the optional() modifier on attributes inside object-typed variables, matching the Terraform HCL optional object attributes pattern. This lets job authors define variables with partial defaults:
variable "resources" {
type = object({
cpu = optional(number, 100)
memory = optional(number, 256)
})
default = {}
}
job "web" {
group "app" {
task "server" {
resources {
cpu = var.resources.cpu
memory = var.resources.memory
}
}
}
}Callers can now omit cpu or memory from the object they pass without Nomad rejecting the variable, reducing boilerplate in shared job templates.
operator snapshot filter (GH-28580)A new subcommand allows editing a Raft snapshot file directly, which is useful for removing or filtering state before restoring a snapshot into a cluster:
nomad operator snapshot filter \
-job-filter='my-old-job' \
input.snap output.snapConsult nomad operator snapshot filter -h for the full set of supported filters before using this against a production snapshot.
Code quality improvements to TLS configuration handling mean TLS handshake failure error messages have changed. This is not a functional break, but any log parsing, alerting, or dashboards that match on exact TLS error strings should be reviewed after the upgrade.
agent:write Required for Server Join (GH-28553)Joining or managing server membership via the CLI (nomad server join) or the HTTP API now requires the agent:write ACL capability. Tokens that previously relied on broader or implicit permissions for this operation will be rejected. Update ACL policies accordingly:
# acl-agent-write.policy.hcl
agent {
policy = "write"
}nomad acl policy apply -description "Agent write for server join" agent-write acl-agent-write.policy.hclVerify any automation (configuration management, join scripts, operators dashboards) uses a token with this capability before upgrading servers.
The deprecated top-level server fields retry_join, retry_max, retry_interval, and start_join have been removed. Configuration using these fields will fail to start after the upgrade. Migrate them into the server_join block:
server {
enabled = true
server_join {
retry_join = ["10.0.1.10", "10.0.1.11", "10.0.1.12"]
retry_max = 3
retry_interval = "15s"
}
}Audit every server.hcl / agent config file in the fleet for the old top-level keys before rolling out v2.1.0.
Allocation.Resources and Allocation.TaskResources fields are deprecated in the Go API client and HTTP responses. Switch consumers to Allocation.AllocatedResources (GH-28486).var put CLI panic on invalid input (GH-28630).plugin status -verbose reporting capabilities not actually supported by the plugin (GH-28626).cores-reserved allocations and for pagination bugs on the jobs list page (GH-28569, GH-28178).agent:write requirement on server join (GH-28553).retry_join, retry_max, retry_interval, and start_join top-level fields and move them into server_join blocks (GH-28554).hashicorp/nomad provider, pin and refresh the provider separately from the Nomad binary version:terraform {
required_providers {
nomad = {
source = "hashicorp/nomad"
version = "~> 2.0"
}
}
}terraform init -upgrade
terraform plan# On each server, after replacing the binary
systemctl restart nomad
nomad server membersAfter upgrading, confirm the cluster is on v2.1.0 and healthy:
nomad version
nomad server members
nomad node statusConfirm ACL enforcement for server join if ACLs are enabled:
nomad acl token self
nomad server join -hIf using the experimental batch queue, validate node pool configuration parses correctly:
nomad node pool status batch-workersNomad v2.1.0 is primarily an operational hygiene release: it closes out a long-deprecated config path (retry_join and friends), tightens ACL requirements around server membership, and ships a number of targeted scheduler and UI bug fixes. The experimental batch job queue is worth tracking for teams running mixed batch/service workloads, but its HCL schema is not yet finalized in the release notes — wait for official docs before committing production configuration to it. The two breaking changes are small in scope but will cause startup failures or permission errors if skipped, so audit agent configs and ACL policies before rolling this out.
Nomad v2.0.7 brings wildcard namespace workload identity for native services, federation replication fixes, and more bug fixes.
Consul v2.1.0 replaces iptables with nftables for transparent proxy, tightens Enterprise API/ACL checks, and patches several CVEs. Upgrade notes inside.
Terraform 1.17.0 brings Policy GA, -minimal-refresh planning, variables/locals in provider requirements, and key bug fixes. Upgrade notes inside.
Terraform Helm provider v3.3.0 bumps Helm to 3.20.2, updates k8s.io deps, and triggers a one-time manifest diff for experiments.manifest users.