hashicorp/nomad · error
Invalid lifecycle hooks given
Error message
Invalid lifecycle hooks given
What it means
Sentinel validation guard in TaskTemplateManagerConfig.Validate: the caller constructed the manager config without a Lifecycle (hooks) value, so the template manager would have nothing to invoke on template events. It fires only when NewTaskTemplateManager is handed a struct that skipped setting Lifecycle.
Source
Thrown at client/allocrunner/taskrunner/template/template.go:156
// in downstream platform-specific template runner consumers
TaskID string
Logger hclog.Logger
// RenderFunc allows custom rendering of templated data, and overrides the
// Nomad custom RenderFunc used for sandboxing. This is currently used by
// the secrets block to hold all templated data in memory.
RenderFunc renderer.Renderer
}
// Validate validates the configuration.
func (c *TaskTemplateManagerConfig) Validate() error {
if c == nil {
return fmt.Errorf("Nil config passed")
} else if c.UnblockCh == nil {
return fmt.Errorf("Invalid unblock channel given")
} else if c.Lifecycle == nil {
return fmt.Errorf("Invalid lifecycle hooks given")
} else if c.Events == nil {
return fmt.Errorf("Invalid event hook given")
} else if c.ClientConfig == nil {
return fmt.Errorf("Invalid client config given")
} else if c.TaskDir == "" {
return fmt.Errorf("Invalid task directory given: %q", c.TaskDir)
} else if c.EnvBuilder == nil {
return fmt.Errorf("Invalid task environment given")
} else if c.MaxTemplateEventRate == 0 {
return fmt.Errorf("Invalid max template event rate given")
}
// Once is a runner config, but in Nomad it is set per template, so all
// templates given to a runner should have the same value for Once.
var once bool
for i, t := range c.Templates {
if i == 0 {
once = t.OnceView on GitHub (pinned to 482b49bf1a)
Solutions
- Set the Lifecycle field on TaskTemplateManagerConfig before calling NewTaskTemplateManager
- Ensure the taskrunner constructs its lifecycle hooks and passes them into the config struct
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at client/allocrunner/taskrunner/template/template.go:156 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/7af1a2b50ad19a7d.
Report an issue: GitHub.