{"record":{"id":"71dd4dc54ee595a1","repo":"hashicorp/nomad","slug":"must-specify-change-script-configuration-value-whe","errorCode":null,"errorMessage":"must specify change script configuration value when change mode is script","messagePattern":"must specify change script configuration value when change mode is script","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nomad/structs/structs.go","lineNumber":8992,"sourceCode":"\tif err != nil {\n\t\tmErr.Errors = append(mErr.Errors, fmt.Errorf(\"invalid destination path: %v\", err))\n\t} else if escaped {\n\t\tmErr.Errors = append(mErr.Errors, fmt.Errorf(\"destination escapes allocation directory\"))\n\t}\n\n\t// Verify a proper change mode\n\tswitch t.ChangeMode {\n\tcase TemplateChangeModeNoop, TemplateChangeModeRestart:\n\tcase TemplateChangeModeSignal:\n\t\tif t.ChangeSignal == \"\" {\n\t\t\t_ = multierror.Append(&mErr, fmt.Errorf(\"Must specify signal value when change mode is signal\"))\n\t\t}\n\t\tif t.Envvars {\n\t\t\t_ = multierror.Append(&mErr, fmt.Errorf(\"cannot use signals with env var templates\"))\n\t\t}\n\tcase TemplateChangeModeScript:\n\t\tif t.ChangeScript == nil {\n\t\t\t_ = multierror.Append(&mErr, fmt.Errorf(\"must specify change script configuration value when change mode is script\"))\n\t\t}\n\n\t\tif err = t.ChangeScript.Validate(); err != nil {\n\t\t\t_ = multierror.Append(&mErr, err)\n\t\t}\n\tdefault:\n\t\t_ = multierror.Append(&mErr, TemplateChangeModeInvalidError)\n\t}\n\n\t// Verify the splay is positive\n\tif t.Splay < 0 {\n\t\t_ = multierror.Append(&mErr, fmt.Errorf(\"Must specify positive splay value\"))\n\t}\n\n\t// Verify the permissions\n\tif t.Perms != \"\" {\n\t\tif _, err := strconv.ParseUint(t.Perms, 8, 12); err != nil {\n\t\t\t_ = multierror.Append(&mErr, fmt.Errorf(\"Failed to parse %q as octal: %v\", t.Perms, err))","sourceCodeStart":8974,"sourceCodeEnd":9010,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/nomad/structs/structs.go#L8974-L9010","documentation":"Template.Validate: the change mode was set to \"script\" but no change_script block was provided. Script-mode re-renders require a command to run, unlike noop/restart/signal modes.","triggerScenarios":"Thrown at nomad/structs/structs.go:8992 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add a change_script block with a valid command path","Switch to change_mode = \"restart\" or \"noop\" if no script is needed"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}