hashicorp/nomad · error

Missing task group name

Error message

Missing task group name

What it means

TaskGroup.Validate requires every task group to have a non-empty Name; Nomad uses the group name to build allocation IDs, service names, and Consul entries. An empty name makes the job spec unaddressable, so validation fails immediately.

Source

Thrown at nomad/structs/structs.go:7128

			services = append(services, service)
		}
	}
	for _, task := range tg.Tasks {
		for _, service := range task.Services {
			if f(service) {
				services = append(services, service)
			}
		}
	}
	return services
}

// Validate is used to check a task group for reasonable configuration
func (tg *TaskGroup) Validate(j *Job) error {
	var mErr *multierror.Error

	if tg.Name == "" {
		mErr = multierror.Append(mErr, errors.New("Missing task group name"))
	} else if strings.Contains(tg.Name, "\000") {
		mErr = multierror.Append(mErr, errors.New("Task group name contains null character"))
	}

	if tg.Count < 0 {
		mErr = multierror.Append(mErr, errors.New("Task group count can't be negative"))
	}

	if len(tg.Tasks) == 0 {
		// could be a lone consul gateway inserted by the connect mutator
		mErr = multierror.Append(mErr, errors.New("Missing tasks for task group"))
	}

	if tg.Disconnect != nil {
		if err := tg.Disconnect.Validate(j); err != nil {
			mErr = multierror.Append(mErr, err)
		}
	}

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Add a unique name to every group stanza, e.g. group "web" {}.
  2. Set the Name field when building the TaskGroup struct in code.
  3. Run nomad job validate to catch it before submission.

Example fix

// before
group {
  count = 1
}
// after
group "web" {
  count = 1
}
Defensive patterns

Strategy: validation

Validate before calling

if tg.Name == "" {
    return errors.New("task group requires a name")
}

Type guard

func hasGroupName(tg api.TaskGroup) bool { return tg.Name != "" }

Prevention

When it happens

Trigger: Submitting a job where a group stanza has no name, or building the JSON API TaskGroup struct with Name left as "".

Common situations: Programmatic job construction (Go SDK / JSON) skipping the Name field; HCL blocks accidentally written without a label; templating that renders an empty name.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


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