mirror of
https://github.com/helm/helm.git
synced 2026-05-28 04:35:48 -04:00
fix(uninstall): supersede deployed releases
This ensures that when `helm uninstall` is run with `--keep-history`
any release in a `deployed` state other than the last release (e.g.
due to a failed upgrade) is being marked as `superseded`.
As a by-effect, running `helm upgrade` on a release which has been
uninstalled after an upgrade failure now no longer works. But instead
fails with a `"<name>" has no deployed releases` error. Which is the
(likely) intended behavior, and prevents other side-effects like
rolling back to a release version which happened before the uninstall
if `--atomic` (or `--rollback-on-failure`) was provided.
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
(cherry picked from commit 2f1ecc7100)
This commit is contained in:
parent
bfc4534772
commit
8bb0b37226
3 changed files with 24 additions and 0 deletions
1
cmd/helm/testdata/output/uninstall-keep-history-earlier-deployed.txt
vendored
Normal file
1
cmd/helm/testdata/output/uninstall-keep-history-earlier-deployed.txt
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
release "aeneas" uninstalled
|
||||
|
|
@ -57,6 +57,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: release.StatusDeployed}),
|
||||
release.Mock(&release.MockReleaseOptions{Name: "aeneas", Version: 2, Status: release.StatusFailed}),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "wait",
|
||||
cmd: "uninstall aeneas --wait",
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import (
|
|||
"helm.sh/helm/v3/pkg/kube"
|
||||
"helm.sh/helm/v3/pkg/release"
|
||||
"helm.sh/helm/v3/pkg/releaseutil"
|
||||
"helm.sh/helm/v3/pkg/storage/driver"
|
||||
helmtime "helm.sh/helm/v3/pkg/time"
|
||||
)
|
||||
|
||||
|
|
@ -170,6 +171,19 @@ func (u *Uninstall) Run(name string) (*release.UninstallReleaseResponse, error)
|
|||
u.cfg.Log("uninstall: Failed to store updated release: %s", 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 {
|
||||
reli.Info.Status = release.StatusSuperseded
|
||||
if err = u.cfg.Releases.Update(reli); err != nil {
|
||||
u.cfg.Log("uninstall: Failed to store updated release: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
if len(errs) > 0 {
|
||||
return res, errors.Errorf("uninstallation completed with %d error(s): %s", len(errs), joinErrors(errs))
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue