Skip to content

Commit

Permalink
template: restore driver handle on update
Browse files Browse the repository at this point in the history
When the template hook Update() method is called it may recreate the
template manager if the Nomad or Vault token has been updated.

This caused the new template manager did not have a driver handler
because this was only being set on the Poststart hook, which is not
called for inplace updates.
  • Loading branch information
lgfa29 committed Jan 26, 2023
1 parent 1e84a53 commit 4b14b5b
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion client/allocrunner/taskrunner/template_hook.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ type templateHook struct {
templateManager *template.TaskTemplateManager
managerLock sync.Mutex

// driverHandle is the task driver executor used by the template manager to
// run scripts when the template change mode is set to script.
//
// Must obtain a managerLock before changing. It may be nil.
driverHandle ti.ScriptExecutor

// consulNamespace is the current Consul namespace
consulNamespace string

Expand Down Expand Up @@ -124,7 +130,8 @@ func (h *templateHook) Poststart(ctx context.Context, req *interfaces.TaskPostst
}

if req.DriverExec != nil {
h.templateManager.SetDriverHandle(req.DriverExec)
h.driverHandle = req.DriverExec
h.templateManager.SetDriverHandle(h.driverHandle)
} else {
for _, tmpl := range h.config.templates {
if tmpl.ChangeMode == structs.TemplateChangeModeScript {
Expand Down Expand Up @@ -158,6 +165,9 @@ func (h *templateHook) newManager() (unblock chan struct{}, err error) {
}

h.templateManager = m
if h.driverHandle != nil {
h.templateManager.SetDriverHandle(h.driverHandle)
}
return unblock, nil
}

Expand Down

0 comments on commit 4b14b5b

Please sign in to comment.