mirror of
https://github.com/helm/helm.git
synced 2026-08-08 09:01:25 +00:00
Merge pull request #12564 from hiddeco/supersede-on-uninstall
fix(uninstall): supersede deployed releases
This commit is contained in:
@@ -18,8 +18,8 @@ package action
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
@@ -28,6 +28,7 @@ import (
|
||||
"helm.sh/helm/v4/pkg/kube"
|
||||
"helm.sh/helm/v4/pkg/release/common"
|
||||
release "helm.sh/helm/v4/pkg/release/v1"
|
||||
"helm.sh/helm/v4/pkg/storage/driver"
|
||||
)
|
||||
|
||||
// Rollback is the action for rolling back to a given release.
|
||||
@@ -278,7 +279,7 @@ func (r *Rollback) performRollback(currentRelease, targetRelease *release.Releas
|
||||
}
|
||||
|
||||
deployed, err := r.cfg.Releases.DeployedAll(currentRelease.Name)
|
||||
if err != nil && !strings.Contains(err.Error(), "has no deployed releases") {
|
||||
if err != nil && !errors.Is(err, driver.ErrNoDeployedReleases) {
|
||||
return nil, err
|
||||
}
|
||||
// Supersede all previous deployments, see issue #2941.
|
||||
|
||||
@@ -188,6 +188,25 @@ func (u *Uninstall) Run(name string) (*releasei.UninstallReleaseResponse, error)
|
||||
u.cfg.Logger().Debug("uninstall: Failed to store updated release", slog.Any("error", err))
|
||||
}
|
||||
|
||||
// Supersede all previous deployments, see issue #12556 (which is a
|
||||
// variation on #2941).
|
||||
deployed, err := u.cfg.Releases.DeployedAll(name)
|
||||
if err != nil && !errors.Is(err, driver.ErrNoDeployedReleases) {
|
||||
return nil, err
|
||||
}
|
||||
for _, reli := range deployed {
|
||||
rel, err := releaserToV1Release(reli)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
u.cfg.Logger().Debug("superseding previous deployment", "version", rel.Version)
|
||||
rel.Info.Status = common.StatusSuperseded
|
||||
if err := u.cfg.Releases.Update(rel); err != nil {
|
||||
u.cfg.Logger().Debug("uninstall: Failed to store updated release", slog.Any("error", err))
|
||||
}
|
||||
}
|
||||
|
||||
if len(errs) > 0 {
|
||||
return res, fmt.Errorf("uninstallation completed with %d error(s): %w", len(errs), joinErrors(errs, "; "))
|
||||
}
|
||||
|
||||
1
pkg/cmd/testdata/output/uninstall-keep-history-earlier-deployed.txt
vendored
Normal file
1
pkg/cmd/testdata/output/uninstall-keep-history-earlier-deployed.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
release "aeneas" uninstalled
|
||||
@@ -19,6 +19,7 @@ package cmd
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"helm.sh/helm/v4/pkg/release/common"
|
||||
release "helm.sh/helm/v4/pkg/release/v1"
|
||||
)
|
||||
|
||||
@@ -57,6 +58,15 @@ func TestUninstall(t *testing.T) {
|
||||
golden: "output/uninstall-keep-history.txt",
|
||||
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "aeneas"})},
|
||||
},
|
||||
{
|
||||
name: "keep history with earlier deployed release",
|
||||
cmd: "uninstall aeneas --keep-history",
|
||||
golden: "output/uninstall-keep-history-earlier-deployed.txt",
|
||||
rels: []*release.Release{
|
||||
release.Mock(&release.MockReleaseOptions{Name: "aeneas", Version: 1, Status: common.StatusDeployed}),
|
||||
release.Mock(&release.MockReleaseOptions{Name: "aeneas", Version: 2, Status: common.StatusFailed}),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "wait",
|
||||
cmd: "uninstall aeneas --wait",
|
||||
|
||||
Reference in New Issue
Block a user