{"record":{"id":"8a468b9ecda9f350","repo":"hashicorp/nomad","slug":"dispatch-payload-validation-failed-v","errorCode":null,"errorMessage":"Dispatch Payload validation failed: %v","messagePattern":"Dispatch Payload validation failed: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nomad/structs/structs.go","lineNumber":8366,"sourceCode":"\tactions := make(map[string]bool)\n\tfor _, action := range t.Actions {\n\t\tif err := action.Validate(); err != nil {\n\t\t\touter := fmt.Errorf(\"Action %s validation failed: %s\", action.Name, err)\n\t\t\tmErr.Errors = append(mErr.Errors, outer)\n\t\t}\n\n\t\tif handled, seen := actions[action.Name]; seen && !handled {\n\t\t\tmErr.Errors = append(mErr.Errors, fmt.Errorf(\"Action %s defined multiple times\", action.Name))\n\t\t\tactions[action.Name] = true\n\t\t\tcontinue\n\t\t}\n\t\tactions[action.Name] = false\n\t}\n\n\t// Validate the dispatch payload block if there\n\tif t.DispatchPayload != nil {\n\t\tif err := t.DispatchPayload.Validate(); err != nil {\n\t\t\tmErr.Errors = append(mErr.Errors, fmt.Errorf(\"Dispatch Payload validation failed: %v\", err))\n\t\t}\n\t}\n\n\t// Validate the Lifecycle block if there\n\tif t.Lifecycle != nil {\n\t\tif err := t.Lifecycle.Validate(); err != nil {\n\t\t\tmErr.Errors = append(mErr.Errors, fmt.Errorf(\"Lifecycle validation failed: %v\", err))\n\t\t}\n\n\t}\n\n\t// Validation for TaskKind field which is used for Consul Connect integration\n\tif t.Kind.IsConnectProxy() {\n\t\t// This task is a Connect proxy so it should not have service blocks\n\t\tif len(t.Services) > 0 {\n\t\t\tmErr.Errors = append(mErr.Errors, fmt.Errorf(\"Connect proxy task must not have a service block\"))\n\t\t}\n\t\tif t.Leader {","sourceCodeStart":8348,"sourceCodeEnd":8384,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/nomad/structs/structs.go#L8348-L8384","documentation":"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.","triggerScenarios":"Submitting a parameterized/dispatch job whose task's `dispatch_payload` block fails validation (invalid `file` mode value or missing/invalid destination).","commonSituations":"Typo in dispatch_payload `file` field; specifying a server mode that is no longer supported; hand-editing dispatch blocks in generated HCL.","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`"],"exampleFix":"// before\ndispatch_payload {\n  file = \"/abs/payload.json\"\n}\n// after\ndispatch_payload {\n  file = \"local/payload.json\"\n}","handlingStrategy":"validation","validationCode":"if task.DispatchPayload != nil {\n    if err := task.DispatchPayload.Validate(); err != nil {\n        return fmt.Errorf(\"dispatch_payload: %w\", err)\n    }\n}","typeGuard":null,"tryCatchPattern":"if err := job.Validate(); err != nil {\n    if strings.Contains(err.Error(), \"Dispatch Payload validation failed\") { /* fix payload block */ }\n}","preventionTips":["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"],"tags":["nomad","job-validation","dispatch-payload"],"backgroundTag":"job-spec-validation-failed","analyzedSha":"482b49bf1aec006f089bcfc7e632d8f6ac303e5e","analyzedAt":"2026-09-04T07:54:14.808Z","contentChangedAt":"2026-09-04T07:54:14.808Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}