Fix preapply hook behavior

Fixes #399

Signed-off-by: Yusuke Kuoka <ykuoka@gmail.com>
This commit is contained in:
Yusuke Kuoka 2022-10-10 08:26:56 +00:00 committed by yxxhero
parent ff107103da
commit c2ea0f0355
1 changed files with 15 additions and 26 deletions

View File

@ -1360,32 +1360,33 @@ Do you really want to apply?
st.Releases = selectedAndNeededReleases st.Releases = selectedAndNeededReleases
if !interactive || interactive && r.askForConfirmation(confMsg) { 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)...) r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state)...)
// We deleted releases by traversing the DAG in reverse order // We deleted releases by traversing the DAG in reverse order
if len(releasesToBeDeleted) > 0 { 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 { _, 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 ( var rs []state.ReleaseSpec
rs []state.ReleaseSpec
preapplyErrors []error
)
for _, r := range subst.Releases { for _, r := range subst.Releases {
release := r release := r
if r2, ok := releasesToBeDeleted[state.ReleaseToID(&release)]; ok { 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) rs = append(rs, r2)
} }
} }
if len(preapplyErrors) > 0 {
return preapplyErrors
}
subst.Releases = rs subst.Releases = rs
return subst.DeleteReleasesForSync(&affectedReleases, helm, c.Concurrency()) return subst.DeleteReleasesForSync(&affectedReleases, helm, c.Concurrency())
@ -1399,27 +1400,15 @@ Do you really want to apply?
// We upgrade releases by traversing the DAG // We upgrade releases by traversing the DAG
if len(releasesToBeUpdated) > 0 { 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 { _, 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 ( var rs []state.ReleaseSpec
rs []state.ReleaseSpec
preapplyErrors []error
)
for _, r := range subst.Releases { for _, r := range subst.Releases {
release := r release := r
if r2, ok := releasesToBeUpdated[state.ReleaseToID(&release)]; ok { 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) rs = append(rs, r2)
} }
} }
if len(preapplyErrors) > 0 {
return preapplyErrors
}
subst.Releases = rs subst.Releases = rs
syncOpts := &state.SyncOpts{ syncOpts := &state.SyncOpts{