hashicorp/nomad · error

fingerprinting failed: %v

Error message

fingerprinting failed: %v

What it means

NewClient returns this when the fingerprint manager's Run() fails. Fingerprinting detects node attributes (CPU, memory, network, cloud metadata) and scans for task drivers; a hard failure here prevents the client from starting with a usable node view.

Source

Thrown at client/client.go:477

	c.widsigner = widmgr.NewSigner(widmgr.SignerConfig{
		NodeSecret: c.secretNodeID(),
		Region:     cfg.Region,
		RPC:        c,
	})

	c.fingerprintManager = NewFingerprintManager(
		cfg.PluginSingletonLoader,
		c.GetConfig,
		cfg.Node,
		c.shutdownCh,
		c.updateNodeFromFingerprint,
		c.logger,
	)
	c.pluginManagers = pluginmanager.New(c.logger)

	// Fingerprint the node and scan for drivers
	if ir, err := c.fingerprintManager.Run(); err != nil {
		return nil, fmt.Errorf("fingerprinting failed: %v", err)
	} else {
		c.topology = numalib.NoImpl(ir.Topology)
	}

	// Create the dynamic workload users pool
	c.users = dynamic.New(&dynamic.PoolConfig{
		MinUGID: cfg.Users.MinDynamicUser,
		MaxUGID: cfg.Users.MaxDynamicUser,
	})

	// Create the cpu core partition manager
	c.partitions = cgroupslib.GetPartition(c.logger.Named("partitions"),
		c.topology.UsableCores(),
	)

	// Create the process wranglers
	wranglers, err := proclib.New(&proclib.Configs{
		UsableCores: c.topology.UsableCores(),

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Read the wrapped inner error to see which fingerprint module failed.
  2. Run with a more permissive environment (mount /sys, /proc read-only if in a container) or as a host service.
  3. Upgrade Nomad — topology detection improved across releases for containerized and older kernels.
  4. Check the client config for fingerprint/driver allow-deny settings that could interact badly, then retry.

Example fix

// inside a hardened container, before
docker run --read-only alpine nomad agent -client
// after: allow sysfs access
docker run -v /sys:/sys:ro -v /proc:/proc:ro nomad agent -client
Defensive patterns

Strategy: try-catch

Try / catch

client, err := client.NewClient(cfg, logger)
if err != nil && strings.Contains(err.Error(), "fingerprinting failed") {
    // surface the wrapped cause to the operator immediately
    logger.Error("client start blocked by fingerprinting", "cause", err)
    // e.g. check /sys and /proc mounts, kernel version, then restart the agent
    os.Exit(1)
}

Prevention

When it happens

Trigger: c.fingerprintManager.Run() returns an error — typically failure to build the node topology (NUMA/CPU detection) or a fatal error during driver detection startup.

Common situations: Unusual kernel/CPU environments where numalib topology detection fails (containers, unusual NUMA layouts, restricted /sys access); severely restricted procfs/sysfs in hardened containers; kernel version incompatibilities.

Related errors


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