wait for release before post hooks

If a release has post-install, post-delete, or post-rollback hooks,
always wait for the main resources before doing the post - otherwise
it's not really "post".

Signed-off-by: Joe Julian <me@joejulian.name>
pull/11788/head
Joe Julian 1 year ago
parent 5bf273d81b
commit d2c7b1658d
No known key found for this signature in database
GPG Key ID: FAB12BE0575D999B

@ -38,7 +38,7 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent,
}
}
// hooke are pre-ordered by kind, so keep order stable
// hooks are pre-ordered by kind, so keep order stable
sort.Stable(hookByWeight(executingHooks))
for _, h := range executingHooks {
@ -107,6 +107,39 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent,
return nil
}
func (cfg *Configuration) hasPostInstallHooks(rl *release.Release) bool {
for _, h := range rl.Hooks {
for _, e := range h.Events {
if e == release.HookPostInstall {
return true
}
}
}
return false
}
func (cfg *Configuration) hasPostUpgradeHooks(rl *release.Release) bool {
for _, h := range rl.Hooks {
for _, e := range h.Events {
if e == release.HookPostUpgrade {
return true
}
}
}
return false
}
func (cfg *Configuration) hasPostRollbackHooks(rl *release.Release) bool {
for _, h := range rl.Hooks {
for _, e := range h.Events {
if e == release.HookPostRollback {
return true
}
}
}
return false
}
// hookByWeight is a sorter for hooks
type hookByWeight []*release.Hook

@ -379,7 +379,9 @@ func (i *Install) performInstall(c chan<- resultMessage, rel *release.Release, t
}
}
if i.Wait {
waitBeforePostHooks := !i.DisableHooks && i.cfg.hasPostInstallHooks(rel) || i.cfg.hasPostUpgradeHooks(rel)
if i.Wait || waitBeforePostHooks {
if i.WaitForJobs {
if err := i.cfg.KubeClient.WaitWithJobs(resources, i.Timeout); err != nil {
i.reportToRun(c, rel, err)

@ -204,7 +204,9 @@ func (r *Rollback) performRollback(currentRelease, targetRelease *release.Releas
}
}
if r.Wait {
waitBeforePostHooks := !r.DisableHooks && r.cfg.hasPostRollbackHooks(targetRelease)
if r.Wait || waitBeforePostHooks {
if r.WaitForJobs {
if err := r.cfg.KubeClient.WaitWithJobs(target, r.Timeout); err != nil {
targetRelease.SetStatus(release.StatusFailed, fmt.Sprintf("Release %q failed: %s", targetRelease.Name, err.Error()))

Loading…
Cancel
Save