template: restore driver handle on update (#15915)
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.
This commit is contained in:
parent
881a4cfaff
commit
de87cdc816
|
@ -0,0 +1,3 @@
|
|||
```release-note:bug
|
||||
template: Fixed a bug that caused the chage script to fail to run
|
||||
```
|
|
@ -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
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue