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
- Read the wrapped inner error for the exact dispatch_payload field problem
- Set `file` to a supported relative path under the task directory (e.g. local/payload)
- 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
- Use relative paths under local/ for payload file
- Only add dispatch_payload to jobs dispatched via `nomad job dispatch`
- Keep parameterized job specs in version control and validated in CI
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
- ErrConnectRequireOneNetwork
- ErrConnectInvalidNetworkMode
- service.port must be set for mesh gateway service
- non-default Consul cluster requires Nomad Enterprise
- numa scheduling requires Nomad Enterprise
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/8a468b9ecda9f350.
Report an issue: GitHub.