From d46b614c582d5e4dde889f471a6c6b2e4e1c8a95 Mon Sep 17 00:00:00 2001 From: Ben Hesketh Date: Mon, 14 Aug 2023 17:34:39 +0100 Subject: [PATCH] Changing default and adding backwards compatability Signed-off-by: Ben Hesketh --- cmd/helm/install.go | 2 +- pkg/action/install.go | 5 +++++ pkg/action/release_testing.go | 5 +++++ pkg/action/rollback.go | 5 +++++ pkg/action/uninstall.go | 5 ++++- pkg/action/upgrade.go | 5 ++++- 6 files changed, 24 insertions(+), 3 deletions(-) diff --git a/cmd/helm/install.go b/cmd/helm/install.go index 4c10e23b4..5a7782ea6 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -178,7 +178,7 @@ func addInstallFlags(cmd *cobra.Command, f *pflag.FlagSet, client *action.Instal f.BoolVar(&client.DisableHooks, "no-hooks", false, "prevent hooks from running during install") f.BoolVar(&client.Replace, "replace", false, "re-use the given name, only if that name is a deleted release which remains in the history. This is unsafe in production") f.DurationVar(&client.Timeout, "timeout", 300*time.Second, "time to wait for any individual Kubernetes operation") - f.DurationVar(&client.HookTimeout, "hook-timeout", 300*time.Second, "time to wait for any individual hook") + f.DurationVar(&client.HookTimeout, "hook-timeout", 0*time.Second, "time to wait for any individual hook") f.BoolVar(&client.Wait, "wait", false, "if set, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment, StatefulSet, or ReplicaSet are in a ready state before marking the release as successful. It will wait for as long as --timeout") f.BoolVar(&client.WaitForJobs, "wait-for-jobs", false, "if set and --wait enabled, will wait until all Jobs have been completed before marking the release as successful. It will wait for as long as --timeout") f.BoolVarP(&client.GenerateName, "generate-name", "g", false, "generate the name (and omit the NAME parameter)") diff --git a/pkg/action/install.go b/pkg/action/install.go index 14fed3433..ba1b634ef 100644 --- a/pkg/action/install.go +++ b/pkg/action/install.go @@ -405,6 +405,11 @@ func (i *Install) isDryRun() bool { func (i *Install) performInstall(c chan<- resultMessage, rel *release.Release, toBeAdopted kube.ResourceList, resources kube.ResourceList) { + // using HookTimeout if set otherwise using Timeout + if i.HookTimeout == 0*time.Second { + i.HookTimeout = i.Timeout + } + // pre-install hooks if !i.DisableHooks { if err := i.cfg.execHook(rel, release.HookPreInstall, i.HookTimeout); err != nil { diff --git a/pkg/action/release_testing.go b/pkg/action/release_testing.go index a108afba5..39fb2d973 100644 --- a/pkg/action/release_testing.go +++ b/pkg/action/release_testing.go @@ -94,6 +94,11 @@ func (r *ReleaseTesting) Run(name string) (*release.Release, error) { rel.Hooks = executingHooks } + // using HookTimeout if set otherwise using Timeout + if r.HookTimeout == 0*time.Second { + r.HookTimeout = r.Timeout + } + if err := r.cfg.execHook(rel, release.HookTest, r.HookTimeout); err != nil { rel.Hooks = append(skippedHooks, rel.Hooks...) r.cfg.Releases.Update(rel) diff --git a/pkg/action/rollback.go b/pkg/action/rollback.go index 2eea926db..93b836e56 100644 --- a/pkg/action/rollback.go +++ b/pkg/action/rollback.go @@ -156,6 +156,11 @@ func (r *Rollback) performRollback(currentRelease, targetRelease *release.Releas return targetRelease, errors.Wrap(err, "unable to build kubernetes objects from new release manifest") } + // using HookTimeout if set otherwise using Timeout + if r.HookTimeout == 0*time.Second { + r.HookTimeout = r.Timeout + } + // pre-rollback hooks if !r.DisableHooks { if err := r.cfg.execHook(targetRelease, release.HookPreRollback, r.HookTimeout); err != nil { diff --git a/pkg/action/uninstall.go b/pkg/action/uninstall.go index a9868ecfd..d10b0bc4d 100644 --- a/pkg/action/uninstall.go +++ b/pkg/action/uninstall.go @@ -105,7 +105,10 @@ func (u *Uninstall) Run(name string) (*release.UninstallReleaseResponse, error) rel.Info.Deleted = helmtime.Now() rel.Info.Description = "Deletion in progress (or silently failed)" res := &release.UninstallReleaseResponse{Release: rel} - + // using HookTimeout if set otherwise using Timeout + if u.HookTimeout == 0*time.Second { + u.HookTimeout = u.Timeout + } if !u.DisableHooks { if err := u.cfg.execHook(rel, release.HookPreDelete, u.HookTimeout); err != nil { return res, err diff --git a/pkg/action/upgrade.go b/pkg/action/upgrade.go index 866b634cd..8ab04bc3c 100644 --- a/pkg/action/upgrade.go +++ b/pkg/action/upgrade.go @@ -390,8 +390,11 @@ func (u *Upgrade) handleContext(ctx context.Context, done chan interface{}, c ch } } func (u *Upgrade) releasingUpgrade(c chan<- resultMessage, upgradedRelease *release.Release, current kube.ResourceList, target kube.ResourceList, originalRelease *release.Release) { + // using HookTimeout if set otherwise using Timeout + if u.HookTimeout == 0*time.Second { + u.HookTimeout = u.Timeout + } // pre-upgrade hooks - if !u.DisableHooks { if err := u.cfg.execHook(upgradedRelease, release.HookPreUpgrade, u.HookTimeout); err != nil { u.reportToPerformUpgrade(c, upgradedRelease, kube.ResourceList{}, fmt.Errorf("pre-upgrade hooks failed: %s", err))