From b044820607701045b6d6e2bb8276e4a4c7ffe6f9 Mon Sep 17 00:00:00 2001 From: KUOKA Yusuke Date: Fri, 27 Dec 2019 09:33:28 +0900 Subject: [PATCH] fix: helmfile destroy does not delete helm releases in status : PENDING_INSTALL (#995) Fixes #539 --- pkg/app/app_test.go | 60 ++++++++++++++++++++--------------------- pkg/state/state.go | 1 + pkg/state/state_test.go | 4 +-- 3 files changed, 33 insertions(+), 32 deletions(-) diff --git a/pkg/app/app_test.go b/pkg/app/app_test.go index 09fd382b..5ef96c4b 100644 --- a/pkg/app/app_test.go +++ b/pkg/app/app_test.go @@ -2243,10 +2243,10 @@ releases: }, lists: map[exectest.ListKey]string{ // delete frontend-v1 and backend-v1 - exectest.ListKey{Filter: "^frontend-v1$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^frontend-v1$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE frontend-v1 4 Fri Nov 1 08:40:07 2019 DEPLOYED backend-3.1.0 3.1.0 default `, - exectest.ListKey{Filter: "^backend-v1$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^backend-v1$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE backend-v1 4 Fri Nov 1 08:40:07 2019 DEPLOYED backend-3.1.0 3.1.0 default `, }, @@ -2431,33 +2431,33 @@ processing releases in group 1/5: logging, front-proxy worker 1/1 started worker 1/1 finished worker 1/1 started -getting deployed release version failed:unexpected list key: {^logging$ --kube-contextdefault} -getting deployed release version failed:unexpected list key: {^front-proxy$ --kube-contextdefault} +getting deployed release version failed:unexpected list key: {^logging$ --kube-contextdefault--deployed--failed--pending} +getting deployed release version failed:unexpected list key: {^front-proxy$ --kube-contextdefault--deployed--failed--pending} worker 1/1 finished processing releases in group 2/5: database, servicemesh worker 1/1 started worker 1/1 finished worker 1/1 started -getting deployed release version failed:unexpected list key: {^database$ --kube-contextdefault} -getting deployed release version failed:unexpected list key: {^servicemesh$ --kube-contextdefault} +getting deployed release version failed:unexpected list key: {^database$ --kube-contextdefault--deployed--failed--pending} +getting deployed release version failed:unexpected list key: {^servicemesh$ --kube-contextdefault--deployed--failed--pending} worker 1/1 finished processing releases in group 3/5: anotherbackend worker 1/1 started worker 1/1 finished worker 1/1 started -getting deployed release version failed:unexpected list key: {^anotherbackend$ --kube-contextdefault} +getting deployed release version failed:unexpected list key: {^anotherbackend$ --kube-contextdefault--deployed--failed--pending} worker 1/1 finished processing releases in group 4/5: backend-v1, backend-v2 worker 1/1 started worker 1/1 finished worker 1/1 started -getting deployed release version failed:unexpected list key: {^backend-v2$ --kube-contextdefault} +getting deployed release version failed:unexpected list key: {^backend-v2$ --kube-contextdefault--deployed--failed--pending} worker 1/1 finished processing releases in group 5/5: frontend-v1, frontend-v2, frontend-v3 worker 1/1 started worker 1/1 finished worker 1/1 started -getting deployed release version failed:unexpected list key: {^frontend-v3$ --kube-contextdefault} +getting deployed release version failed:unexpected list key: {^frontend-v3$ --kube-contextdefault--deployed--failed--pending} worker 1/1 finished UPDATED RELEASES: @@ -2499,8 +2499,8 @@ releases: exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: nil, }, lists: map[exectest.ListKey]string{ - exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault"}: ``, - exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: ``, + exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default `, }, @@ -2592,14 +2592,14 @@ processing releases in group 1/2: baz, bar worker 1/1 started worker 1/1 finished worker 1/1 started -getting deployed release version failed:unexpected list key: {^baz$ --kube-contextdefault} -getting deployed release version failed:unexpected list key: {^bar$ --kube-contextdefault} +getting deployed release version failed:unexpected list key: {^baz$ --kube-contextdefault--deployed--failed--pending} +getting deployed release version failed:unexpected list key: {^bar$ --kube-contextdefault--deployed--failed--pending} worker 1/1 finished processing releases in group 2/2: foo worker 1/1 started worker 1/1 finished worker 1/1 started -getting deployed release version failed:unexpected list key: {^foo$ --kube-contextdefault} +getting deployed release version failed:unexpected list key: {^foo$ --kube-contextdefault--deployed--failed--pending} worker 1/1 finished UPDATED RELEASES: @@ -2869,13 +2869,13 @@ processing releases in group 1/2: tns1/ns1/foo worker 1/1 started worker 1/1 finished worker 1/1 started -getting deployed release version failed:unexpected list key: {^foo$ --tiller-namespacetns1--kube-contextdefault} +getting deployed release version failed:unexpected list key: {^foo$ --tiller-namespacetns1--kube-contextdefault--deployed--failed--pending} worker 1/1 finished processing releases in group 2/2: tns2/ns2/bar worker 1/1 started worker 1/1 finished worker 1/1 started -getting deployed release version failed:unexpected list key: {^bar$ --tiller-namespacetns2--kube-contextdefault} +getting deployed release version failed:unexpected list key: {^bar$ --tiller-namespacetns2--kube-contextdefault--deployed--failed--pending} worker 1/1 finished UPDATED RELEASES: @@ -2909,10 +2909,10 @@ releases: exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, lists: map[exectest.ListKey]string{ - exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default `, - exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default `, }, @@ -2942,10 +2942,10 @@ releases: exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, lists: map[exectest.ListKey]string{ - exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default `, - exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default `, }, @@ -2977,10 +2977,10 @@ releases: exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, lists: map[exectest.ListKey]string{ - exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default `, - exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default `, }, @@ -3011,10 +3011,10 @@ releases: exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, lists: map[exectest.ListKey]string{ - exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default `, - exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default `, }, @@ -3045,10 +3045,10 @@ releases: exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, lists: map[exectest.ListKey]string{ - exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default `, - exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default `, }, @@ -3079,10 +3079,10 @@ releases: exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, lists: map[exectest.ListKey]string{ - exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart1-3.1.0 3.1.0 default `, - exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE + exectest.ListKey{Filter: "^bar$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 default `, }, @@ -3221,7 +3221,7 @@ processing releases in group 2/3: default/external-secrets worker 1/1 started worker 1/1 finished worker 1/1 started -getting deployed release version failed:unexpected list key: {^external-secrets$ --kube-contextdefault} +getting deployed release version failed:unexpected list key: {^external-secrets$ --kube-contextdefault--deployed--failed--pending} worker 1/1 finished processing releases in group 3/3: default/my-release 1 release(s) matching app=test found in helmfile.yaml @@ -3229,7 +3229,7 @@ processing releases in group 3/3: default/my-release worker 1/1 started worker 1/1 finished worker 1/1 started -getting deployed release version failed:unexpected list key: {^my-release$ --kube-contextdefault} +getting deployed release version failed:unexpected list key: {^my-release$ --kube-contextdefault--deployed--failed--pending} worker 1/1 finished UPDATED RELEASES: diff --git a/pkg/state/state.go b/pkg/state/state.go index 23a48794..4130b03d 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -658,6 +658,7 @@ func (st *HelmState) listReleases(context helmexec.HelmContext, helm helmexec.In if helm.IsHelm3() && release.Namespace != "" { flags = append(flags, "--namespace", release.Namespace) } + flags = append(flags, "--deployed", "--failed", "--pending") return helm.List(context, "^"+release.Name+"$", flags...) } diff --git a/pkg/state/state_test.go b/pkg/state/state_test.go index 86891bd0..213d7adb 100644 --- a/pkg/state/state_test.go +++ b/pkg/state/state_test.go @@ -1168,7 +1168,7 @@ func TestHelmState_SyncReleasesAffectedRealeases(t *testing.T) { //simulate the release is already installed for i, release := range tt.releases { if tt.installed != nil && tt.installed[i] { - helm.Lists[exectest.ListKey{Filter: "^" + release.Name + "$"}] = release.Name + helm.Lists[exectest.ListKey{Filter: "^" + release.Name + "$", Flags: "--deployed--failed--pending"}] = release.Name } } @@ -1268,7 +1268,7 @@ func TestGetDeployedVersion(t *testing.T) { Lists: map[exectest.ListKey]string{}, } //simulate the helm.list call result - helm.Lists[exectest.ListKey{Filter: "^" + tt.release.Name + "$"}] = tt.listResult + helm.Lists[exectest.ListKey{Filter: "^" + tt.release.Name + "$", Flags: "--deployed--failed--pending"}] = tt.listResult affectedReleases := AffectedReleases{} state.SyncReleases(&affectedReleases, helm, []string{}, 1)