diff --git a/pkg/state/state.go b/pkg/state/state.go index e0bab050..6bb5ce8d 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -444,9 +444,10 @@ type SetValue struct { // AffectedReleases hold the list of released that where updated, deleted, or in error type AffectedReleases struct { - Upgraded []*ReleaseSpec - Deleted []*ReleaseSpec - Failed []*ReleaseSpec + Upgraded []*ReleaseSpec + Deleted []*ReleaseSpec + Failed []*ReleaseSpec + DeleteFailed []*ReleaseSpec } // DefaultEnv is the default environment to use for helm commands @@ -878,13 +879,13 @@ func (st *HelmState) DeleteReleasesForSync(affectedReleases *AffectedReleases, h m.Lock() start := time.Now() if _, err := st.triggerReleaseEvent("preuninstall", nil, release, "sync"); err != nil { - affectedReleases.Failed = append(affectedReleases.Failed, release) + affectedReleases.DeleteFailed = append(affectedReleases.Failed, release) relErr = newReleaseFailedError(release, err) } else if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil { - affectedReleases.Failed = append(affectedReleases.Failed, release) + affectedReleases.DeleteFailed = append(affectedReleases.Failed, release) relErr = newReleaseFailedError(release, err) } else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, "sync"); err != nil { - affectedReleases.Failed = append(affectedReleases.Failed, release) + affectedReleases.DeleteFailed = append(affectedReleases.Failed, release) relErr = newReleaseFailedError(release, err) } else { affectedReleases.Deleted = append(affectedReleases.Deleted, release) @@ -2146,7 +2147,7 @@ func (st *HelmState) DeleteReleases(affectedReleases *AffectedReleases, helm hel if _, err := st.triggerReleaseEvent("preuninstall", nil, &release, "delete"); err != nil { release.duration = time.Since(start) - affectedReleases.Failed = append(affectedReleases.Failed, &release) + affectedReleases.DeleteFailed = append(affectedReleases.Failed, &release) return err } @@ -2154,14 +2155,14 @@ func (st *HelmState) DeleteReleases(affectedReleases *AffectedReleases, helm hel if err := helm.DeleteRelease(context, release.Name, flags...); err != nil { release.duration = time.Since(start) - affectedReleases.Failed = append(affectedReleases.Failed, &release) + affectedReleases.DeleteFailed = append(affectedReleases.Failed, &release) return err } if _, err := st.triggerReleaseEvent("postuninstall", nil, &release, "delete"); err != nil { release.duration = time.Since(start) - affectedReleases.Failed = append(affectedReleases.Failed, &release) + affectedReleases.DeleteFailed = append(affectedReleases.Failed, &release) return err } release.duration = time.Since(start) @@ -3452,6 +3453,21 @@ func (ar *AffectedReleases) DisplayAffectedReleases(logger *zap.SugaredLogger) { } logger.Info(tbl.String()) } + if len(ar.DeleteFailed) > 0 { + logger.Info("\nFAILED TO DELETE RELEASES:") + tbl, _ := prettytable.NewTable(prettytable.Column{Header: "NAME"}, + prettytable.Column{Header: "NAMESPACE", MinWidth: 6}, + prettytable.Column{Header: "DURATION", AlignRight: true}, + ) + tbl.Separator = " " + for _, release := range ar.DeleteFailed { + err := tbl.AddRow(release.Name, release.Namespace, release.duration.Round(time.Second)) + if err != nil { + logger.Warn("Could not add row, %v", err) + } + } + logger.Info(tbl.String()) + } } func escape(value string) string { diff --git a/pkg/state/state_test.go b/pkg/state/state_test.go index 11592c8e..a7d1b62b 100644 --- a/pkg/state/state_test.go +++ b/pkg/state/state_test.go @@ -2808,7 +2808,7 @@ func TestHelmState_Delete(t *testing.T) { affectedReleases := AffectedReleases{} errs := state.DeleteReleases(&affectedReleases, helm, 1, tt.purge, "") if errs != nil { - if !tt.wantErr || len(affectedReleases.Failed) != 1 || affectedReleases.Failed[0].Name != release.Name { + if !tt.wantErr || len(affectedReleases.DeleteFailed) != 1 || affectedReleases.DeleteFailed[0].Name != release.Name { t.Errorf("DeleteReleases() for %s error = %v, wantErr %v", tt.name, errs, tt.wantErr) return }