hashicorp/nomad · error

Deployment ID %q matched no deployments

Error message

Deployment ID %q matched no deployments

What it means

getDeployment lists deployments matching the given ID prefix; when the prefix is syntactically valid but no deployment matches, it returns "Deployment ID %q matched no deployments". This is a prefix-match miss, not an API failure.

Source

Thrown at command/deployment_status.go:550

	dID = strings.ReplaceAll(dID, "-", "")
	if len(dID) == 1 {
		return nil, nil, fmt.Errorf("Identifier must contain at least two characters.")
	}
	if len(dID)%2 == 1 {
		// Identifiers must be of even length, so we strip off the last byte
		// to provide a consistent user experience.
		dID = dID[:len(dID)-1]
	}

	// Have to do a prefix lookup
	deploys, _, err := client.PrefixList(dID)
	if err != nil {
		return nil, nil, err
	}

	switch len(deploys) {
	case 0:
		return nil, nil, fmt.Errorf("Deployment ID %q matched no deployments", dID)
	case 1:
		return deploys[0], nil, nil
	default:
		return nil, deploys, nil
	}
}

func formatDeployment(c *api.Client, d *api.Deployment, uuidLength int) string {
	if d == nil {
		return "No deployment found"
	}
	// Format the high-level elements
	high := []string{
		fmt.Sprintf("ID|%s", limit(d.ID, uuidLength)),
		fmt.Sprintf("Job ID|%s", d.JobID),
		fmt.Sprintf("Job Version|%d", d.JobVersion),
		fmt.Sprintf("Status|%s", d.Status),
		fmt.Sprintf("Description|%s", d.StatusDescription),

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Run `nomad deployment list` and copy an existing deployment ID
  2. Verify NOMAD_ADDR/NOMAD_NAMESPACE point at the right cluster/namespace
  3. Use the full UUID to avoid prefix ambiguity or truncation issues

Example fix

// before
nomad deployment status e3f1c2a9  # guessed/old prefix
// after
nomad deployment list
nomad deployment status <full-id-from-list>
Defensive patterns

Strategy: validation

Validate before calling

ids, _, err := client.Deployments().List(&api.QueryOptions{})
// confirm the prefix matches an entry before calling the status command
found := false
for _, d := range ids {
    if strings.HasPrefix(d.ID, prefix) { found = true; break }
}
if !found { return fmt.Errorf("unknown deployment prefix %q", prefix) }

Prevention

When it happens

Trigger: Calling getDeployment with a valid-length UUID prefix that doesn't correspond to any deployment in the cluster (typo, wrong cluster/namespace, deployment already GC'd).

Common situations: Stale IDs copied from old terminal output; pointing NOMAD_ADDR at a different cluster; deployments purged by job GC so the ID no longer resolves.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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