From c2ea0f035555dca931db14b2e5d3e9ebd03b59cb Mon Sep 17 00:00:00 2001 From: Yusuke Kuoka Date: Mon, 10 Oct 2022 08:26:56 +0000 Subject: [PATCH] Fix preapply hook behavior Fixes #399 Signed-off-by: Yusuke Kuoka --- pkg/app/app.go | 41 +++++++++++++++-------------------------- 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/pkg/app/app.go b/pkg/app/app.go index 96fde0e5..cd550f10 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -1360,32 +1360,33 @@ Do you really want to apply? st.Releases = selectedAndNeededReleases if !interactive || interactive && r.askForConfirmation(confMsg) { + if _, preapplyErrors := withDAG(st, helm, a.Logger, state.PlanOptions{Reverse: true, SelectedReleases: toDelete, SkipNeeds: true}, a.WrapWithoutSelector(func(subst *state.HelmState, helm helmexec.Interface) []error { + for _, r := range subst.Releases { + release := r + if _, err := st.TriggerPreapplyEvent(&release, "apply"); err != nil { + return []error{err} + } + } + + return nil + })); len(preapplyErrors) > 0 { + return true, false, preapplyErrors + } + r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state)...) // We deleted releases by traversing the DAG in reverse order if len(releasesToBeDeleted) > 0 { _, deletionErrs := withDAG(st, helm, a.Logger, state.PlanOptions{Reverse: true, SelectedReleases: toDelete, SkipNeeds: true}, a.WrapWithoutSelector(func(subst *state.HelmState, helm helmexec.Interface) []error { - var ( - rs []state.ReleaseSpec - preapplyErrors []error - ) + var rs []state.ReleaseSpec for _, r := range subst.Releases { release := r if r2, ok := releasesToBeDeleted[state.ReleaseToID(&release)]; ok { - if _, err := st.TriggerPreapplyEvent(&r2, "apply"); err != nil { - preapplyErrors = append(applyErrs, err) - continue - } - rs = append(rs, r2) } } - if len(preapplyErrors) > 0 { - return preapplyErrors - } - subst.Releases = rs return subst.DeleteReleasesForSync(&affectedReleases, helm, c.Concurrency()) @@ -1399,27 +1400,15 @@ Do you really want to apply? // We upgrade releases by traversing the DAG if len(releasesToBeUpdated) > 0 { _, updateErrs := withDAG(st, helm, a.Logger, state.PlanOptions{SelectedReleases: toUpdate, Reverse: false, SkipNeeds: true, IncludeTransitiveNeeds: c.IncludeTransitiveNeeds()}, a.WrapWithoutSelector(func(subst *state.HelmState, helm helmexec.Interface) []error { - var ( - rs []state.ReleaseSpec - preapplyErrors []error - ) + var rs []state.ReleaseSpec for _, r := range subst.Releases { release := r if r2, ok := releasesToBeUpdated[state.ReleaseToID(&release)]; ok { - if _, err := st.TriggerPreapplyEvent(&r2, "apply"); err != nil { - preapplyErrors = append(applyErrs, err) - continue - } - rs = append(rs, r2) } } - if len(preapplyErrors) > 0 { - return preapplyErrors - } - subst.Releases = rs syncOpts := &state.SyncOpts{