hashicorp/nomad · error

Dispatch Payload validation failed: %v

Error message

Dispatch Payload validation failed: %v

What it means

Task.Validate wraps DispatchPayload.Validate failures as "Dispatch Payload validation failed: %v". The dispatch payload block configures where `nomad job dispatch` input is written, and validation rejects invalid modes or missing destinations.

Source

Thrown at nomad/structs/structs.go:8366

	actions := make(map[string]bool)
	for _, action := range t.Actions {
		if err := action.Validate(); err != nil {
			outer := fmt.Errorf("Action %s validation failed: %s", action.Name, err)
			mErr.Errors = append(mErr.Errors, outer)
		}

		if handled, seen := actions[action.Name]; seen && !handled {
			mErr.Errors = append(mErr.Errors, fmt.Errorf("Action %s defined multiple times", action.Name))
			actions[action.Name] = true
			continue
		}
		actions[action.Name] = false
	}

	// Validate the dispatch payload block if there
	if t.DispatchPayload != nil {
		if err := t.DispatchPayload.Validate(); err != nil {
			mErr.Errors = append(mErr.Errors, fmt.Errorf("Dispatch Payload validation failed: %v", err))
		}
	}

	// Validate the Lifecycle block if there
	if t.Lifecycle != nil {
		if err := t.Lifecycle.Validate(); err != nil {
			mErr.Errors = append(mErr.Errors, fmt.Errorf("Lifecycle validation failed: %v", err))
		}

	}

	// Validation for TaskKind field which is used for Consul Connect integration
	if t.Kind.IsConnectProxy() {
		// This task is a Connect proxy so it should not have service blocks
		if len(t.Services) > 0 {
			mErr.Errors = append(mErr.Errors, fmt.Errorf("Connect proxy task must not have a service block"))
		}
		if t.Leader {

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Read the wrapped inner error for the exact dispatch_payload field problem
  2. Set `file` to a supported relative path under the task directory (e.g. local/payload)
  3. Remove the dispatch_payload block if the job is not dispatched via `nomad job dispatch`

Example fix

// before
dispatch_payload {
  file = "/abs/payload.json"
}
// after
dispatch_payload {
  file = "local/payload.json"
}
Defensive patterns

Strategy: validation

Validate before calling

if task.DispatchPayload != nil {
    if err := task.DispatchPayload.Validate(); err != nil {
        return fmt.Errorf("dispatch_payload: %w", err)
    }
}

Try / catch

if err := job.Validate(); err != nil {
    if strings.Contains(err.Error(), "Dispatch Payload validation failed") { /* fix payload block */ }
}

Prevention

When it happens

Trigger: Submitting a parameterized/dispatch job whose task's `dispatch_payload` block fails validation (invalid `file` mode value or missing/invalid destination).

Common situations: Typo in dispatch_payload `file` field; specifying a server mode that is no longer supported; hand-editing dispatch blocks in generated HCL.

Related errors


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