From 2892ec9ff7a2af759e42685ad8cca87b31e625f8 Mon Sep 17 00:00:00 2001 From: Sebastien Plisson Date: Thu, 1 Feb 2018 13:23:22 -0800 Subject: [PATCH 01/10] fix(helm): When waiting for a release to be ready fails and in debug mode, output the release content Closes #3020 --- cmd/helm/upgrade.go | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/cmd/helm/upgrade.go b/cmd/helm/upgrade.go index 7a7dfb0f6..a85903a2f 100644 --- a/cmd/helm/upgrade.go +++ b/cmd/helm/upgrade.go @@ -211,12 +211,22 @@ func (u *upgradeCmd) run() error { helm.ResetValues(u.resetValues), helm.ReuseValues(u.reuseValues), helm.UpgradeWait(u.wait)) - if err != nil { - return fmt.Errorf("UPGRADE FAILED: %v", prettyError(err)) - } if settings.Debug { - printRelease(u.out, resp.Release) + // If there is an error while waiting, make a call without waiting to get the updated release content + if (resp == nil || resp.Release == nil) && u.wait { + if res, e := u.client.ReleaseContent(u.release); e != nil { + fmt.Fprintf(u.out, "Error reading release content: %v", prettyError(e)) + } else { + printRelease(u.out, res.Release) + } + } else { + printRelease(u.out, resp.Release) + } + } + + if err != nil { + return fmt.Errorf("UPGRADE FAILED: %v", prettyError(err)) } fmt.Fprintf(u.out, "Release %q has been upgraded. Happy Helming!\n", u.release) From 6a8fdfb960c30fa18ff8a18f320dcab01583a487 Mon Sep 17 00:00:00 2001 From: Sebastien Plisson Date: Thu, 10 May 2018 16:00:35 -0700 Subject: [PATCH 02/10] Show release content when timeout occur for install and rollback. For rollback show it only when debug flag is set. --- cmd/helm/install.go | 40 +++++++++++++++++++++++++--------------- cmd/helm/rollback.go | 20 +++++++++++++++++++- 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/cmd/helm/install.go b/cmd/helm/install.go index 867c645bb..75b0d9073 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -254,7 +254,7 @@ func (i *installCmd) run() error { return fmt.Errorf("cannot load requirements: %v", err) } - res, err := i.client.InstallReleaseFromChart( + resp, err := i.client.InstallReleaseFromChart( chartRequested, i.namespace, helm.ValueOverrides(rawVals), @@ -264,15 +264,25 @@ func (i *installCmd) run() error { helm.InstallDisableHooks(i.disableHooks), helm.InstallTimeout(i.timeout), helm.InstallWait(i.wait)) - if err != nil { - return prettyError(err) + + // If there is an error while waiting, make a call without waiting to get the release content + if (resp == nil || resp.Release == nil) && i.wait { + if res, e := i.client.ReleaseContent(i.name); e != nil { + fmt.Fprintf(i.out, "Error reading release content: %v", prettyError(e)) + } else { + printRelease(i.out, res.Release) + } + } else { + rel := resp.GetRelease() + if rel == nil { + return nil + } + printRelease(i.out, rel) } - rel := res.GetRelease() - if rel == nil { - return nil + if err != nil { + return prettyError(err) } - i.printRelease(rel) // If this is a dry run, we can't display status. if i.dryRun { @@ -280,7 +290,7 @@ func (i *installCmd) run() error { } // Print the status like status command does - status, err := i.client.ReleaseStatus(rel.Name) + status, err := i.client.ReleaseStatus(i.name) if err != nil { return prettyError(err) } @@ -499,12 +509,12 @@ func readFile(filePath string) ([]byte, error) { if err != nil { return ioutil.ReadFile(filePath) - } else { - getter, err := getterConstructor(filePath, "", "", "") - if err != nil { - return []byte{}, err - } - data, err := getter.Get(filePath) - return data.Bytes(), err } + + getter, err := getterConstructor(filePath, "", "", "") + if err != nil { + return []byte{}, err + } + data, err := getter.Get(filePath) + return data.Bytes(), err } diff --git a/cmd/helm/rollback.go b/cmd/helm/rollback.go index c55707f7c..36886e20e 100644 --- a/cmd/helm/rollback.go +++ b/cmd/helm/rollback.go @@ -88,7 +88,7 @@ func newRollbackCmd(c helm.Interface, out io.Writer) *cobra.Command { } func (r *rollbackCmd) run() error { - _, err := r.client.RollbackRelease( + resp, err := r.client.RollbackRelease( r.name, helm.RollbackDryRun(r.dryRun), helm.RollbackRecreate(r.recreate), @@ -97,6 +97,24 @@ func (r *rollbackCmd) run() error { helm.RollbackVersion(r.revision), helm.RollbackTimeout(r.timeout), helm.RollbackWait(r.wait)) + + if settings.Debug { + // If there is an error while waiting, make a call without waiting to get the release content + if (resp == nil || resp.Release == nil) && r.wait { + if res, e := r.client.ReleaseContent(r.name); e != nil { + fmt.Fprintf(r.out, "Error reading release content: %v", prettyError(e)) + } else { + printRelease(r.out, res.Release) + } + } else { + rel := resp.GetRelease() + if rel == nil { + return nil + } + printRelease(r.out, rel) + } + } + if err != nil { return prettyError(err) } From cc55f4fcf674dba3377fc78ceb3bd2781a5a21b9 Mon Sep 17 00:00:00 2001 From: Sebastien Plisson Date: Fri, 11 May 2018 10:49:35 -0700 Subject: [PATCH 03/10] use i.printRelease --- cmd/helm/install.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/helm/install.go b/cmd/helm/install.go index 75b0d9073..eaed0436f 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -270,14 +270,14 @@ func (i *installCmd) run() error { if res, e := i.client.ReleaseContent(i.name); e != nil { fmt.Fprintf(i.out, "Error reading release content: %v", prettyError(e)) } else { - printRelease(i.out, res.Release) + i.printRelease(res.Release) } } else { rel := resp.GetRelease() if rel == nil { return nil } - printRelease(i.out, rel) + i.printRelease(rel) } if err != nil { From 11d5c4fbeb3ea40ba6c505a59625e37fd3364430 Mon Sep 17 00:00:00 2001 From: Sebastien Plisson Date: Thu, 1 Feb 2018 13:23:22 -0800 Subject: [PATCH 04/10] fix(helm): When waiting for a release to be ready fails and in debug mode, output the release content Closes #3020 --- cmd/helm/upgrade.go | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/cmd/helm/upgrade.go b/cmd/helm/upgrade.go index 4dd433a39..751f30ac9 100644 --- a/cmd/helm/upgrade.go +++ b/cmd/helm/upgrade.go @@ -225,12 +225,22 @@ func (u *upgradeCmd) run() error { helm.ResetValues(u.resetValues), helm.ReuseValues(u.reuseValues), helm.UpgradeWait(u.wait)) - if err != nil { - return fmt.Errorf("UPGRADE FAILED: %v", prettyError(err)) - } if settings.Debug { - printRelease(u.out, resp.Release) + // If there is an error while waiting, make a call without waiting to get the updated release content + if (resp == nil || resp.Release == nil) && u.wait { + if res, e := u.client.ReleaseContent(u.release); e != nil { + fmt.Fprintf(u.out, "Error reading release content: %v", prettyError(e)) + } else { + printRelease(u.out, res.Release) + } + } else { + printRelease(u.out, resp.Release) + } + } + + if err != nil { + return fmt.Errorf("UPGRADE FAILED: %v", prettyError(err)) } fmt.Fprintf(u.out, "Release %q has been upgraded. Happy Helming!\n", u.release) From b03f5890645eb9acdac64e879b0ce76428e57695 Mon Sep 17 00:00:00 2001 From: Sebastien Plisson Date: Thu, 10 May 2018 16:00:35 -0700 Subject: [PATCH 05/10] Show release content when timeout occur for install and rollback. For rollback show it only when debug flag is set. --- cmd/helm/install.go | 26 ++++++++++++++++++-------- cmd/helm/rollback.go | 20 +++++++++++++++++++- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/cmd/helm/install.go b/cmd/helm/install.go index d1c24c213..d7d656120 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -267,7 +267,7 @@ func (i *installCmd) run() error { return fmt.Errorf("cannot load requirements: %v", err) } - res, err := i.client.InstallReleaseFromChart( + resp, err := i.client.InstallReleaseFromChart( chartRequested, i.namespace, helm.ValueOverrides(rawVals), @@ -278,15 +278,25 @@ func (i *installCmd) run() error { helm.InstallDisableCRDHook(i.disableCRDHook), helm.InstallTimeout(i.timeout), helm.InstallWait(i.wait)) - if err != nil { - return prettyError(err) + + // If there is an error while waiting, make a call without waiting to get the release content + if (resp == nil || resp.Release == nil) && i.wait { + if res, e := i.client.ReleaseContent(i.name); e != nil { + fmt.Fprintf(i.out, "Error reading release content: %v", prettyError(e)) + } else { + printRelease(i.out, res.Release) + } + } else { + rel := resp.GetRelease() + if rel == nil { + return nil + } + printRelease(i.out, rel) } - rel := res.GetRelease() - if rel == nil { - return nil + if err != nil { + return prettyError(err) } - i.printRelease(rel) // If this is a dry run, we can't display status. if i.dryRun { @@ -298,7 +308,7 @@ func (i *installCmd) run() error { } // Print the status like status command does - status, err := i.client.ReleaseStatus(rel.Name) + status, err := i.client.ReleaseStatus(i.name) if err != nil { return prettyError(err) } diff --git a/cmd/helm/rollback.go b/cmd/helm/rollback.go index 889b6ae28..7d56dbbcc 100644 --- a/cmd/helm/rollback.go +++ b/cmd/helm/rollback.go @@ -88,7 +88,7 @@ func newRollbackCmd(c helm.Interface, out io.Writer) *cobra.Command { } func (r *rollbackCmd) run() error { - _, err := r.client.RollbackRelease( + resp, err := r.client.RollbackRelease( r.name, helm.RollbackDryRun(r.dryRun), helm.RollbackRecreate(r.recreate), @@ -97,6 +97,24 @@ func (r *rollbackCmd) run() error { helm.RollbackVersion(r.revision), helm.RollbackTimeout(r.timeout), helm.RollbackWait(r.wait)) + + if settings.Debug { + // If there is an error while waiting, make a call without waiting to get the release content + if (resp == nil || resp.Release == nil) && r.wait { + if res, e := r.client.ReleaseContent(r.name); e != nil { + fmt.Fprintf(r.out, "Error reading release content: %v", prettyError(e)) + } else { + printRelease(r.out, res.Release) + } + } else { + rel := resp.GetRelease() + if rel == nil { + return nil + } + printRelease(r.out, rel) + } + } + if err != nil { return prettyError(err) } From 64dda7f5725c63f16d342ad0f3348fa6a7bb67a4 Mon Sep 17 00:00:00 2001 From: Sebastien Plisson Date: Fri, 11 May 2018 10:49:35 -0700 Subject: [PATCH 06/10] use i.printRelease --- cmd/helm/install.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/helm/install.go b/cmd/helm/install.go index d7d656120..01bb9d30a 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -284,14 +284,14 @@ func (i *installCmd) run() error { if res, e := i.client.ReleaseContent(i.name); e != nil { fmt.Fprintf(i.out, "Error reading release content: %v", prettyError(e)) } else { - printRelease(i.out, res.Release) + i.printRelease(res.Release) } } else { rel := resp.GetRelease() if rel == nil { return nil } - printRelease(i.out, rel) + i.printRelease(rel) } if err != nil { From 3ec202378ef01df33442292b9bf477cd750ce774 Mon Sep 17 00:00:00 2001 From: Sebastien Plisson Date: Fri, 8 Jun 2018 09:50:47 -0700 Subject: [PATCH 07/10] Revert "Rebased" This reverts commit 1737b711ca07cd1fa587ae70f1a0c9ff89dead6e. --- cmd/helm/install.go | 10 ++++++++-- cmd/helm/rollback.go | 20 +------------------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/cmd/helm/install.go b/cmd/helm/install.go index 01bb9d30a..962ca3e15 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -267,7 +267,7 @@ func (i *installCmd) run() error { return fmt.Errorf("cannot load requirements: %v", err) } - resp, err := i.client.InstallReleaseFromChart( + res, err := i.client.InstallReleaseFromChart( chartRequested, i.namespace, helm.ValueOverrides(rawVals), @@ -298,6 +298,12 @@ func (i *installCmd) run() error { return prettyError(err) } + rel := res.GetRelease() + if rel == nil { + return nil + } + i.printRelease(rel) + // If this is a dry run, we can't display status. if i.dryRun { // This is special casing to avoid breaking backward compatibility: @@ -308,7 +314,7 @@ func (i *installCmd) run() error { } // Print the status like status command does - status, err := i.client.ReleaseStatus(i.name) + status, err := i.client.ReleaseStatus(rel.Name) if err != nil { return prettyError(err) } diff --git a/cmd/helm/rollback.go b/cmd/helm/rollback.go index 7d56dbbcc..889b6ae28 100644 --- a/cmd/helm/rollback.go +++ b/cmd/helm/rollback.go @@ -88,7 +88,7 @@ func newRollbackCmd(c helm.Interface, out io.Writer) *cobra.Command { } func (r *rollbackCmd) run() error { - resp, err := r.client.RollbackRelease( + _, err := r.client.RollbackRelease( r.name, helm.RollbackDryRun(r.dryRun), helm.RollbackRecreate(r.recreate), @@ -97,24 +97,6 @@ func (r *rollbackCmd) run() error { helm.RollbackVersion(r.revision), helm.RollbackTimeout(r.timeout), helm.RollbackWait(r.wait)) - - if settings.Debug { - // If there is an error while waiting, make a call without waiting to get the release content - if (resp == nil || resp.Release == nil) && r.wait { - if res, e := r.client.ReleaseContent(r.name); e != nil { - fmt.Fprintf(r.out, "Error reading release content: %v", prettyError(e)) - } else { - printRelease(r.out, res.Release) - } - } else { - rel := resp.GetRelease() - if rel == nil { - return nil - } - printRelease(r.out, rel) - } - } - if err != nil { return prettyError(err) } From 059ea347e355de58fceb1bed6d8f5d0e6b5fa678 Mon Sep 17 00:00:00 2001 From: Sebastien Plisson Date: Thu, 10 May 2018 16:00:35 -0700 Subject: [PATCH 08/10] Show release content when timeout occur for install and rollback. For rollback show it only when debug flag is set. --- cmd/helm/install.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/helm/install.go b/cmd/helm/install.go index 962ca3e15..7a36ddea4 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -539,7 +539,7 @@ func readFile(filePath, CertFile, KeyFile, CAFile string) ([]byte, error) { return ioutil.ReadFile(filePath) } - getter, err := getterConstructor(filePath, CertFile, KeyFile, CAFile) + getter, err := getterConstructor(filePath, "", "", "") if err != nil { return []byte{}, err } From 9d44cfa89d7d617b16b4da095504c31279caef53 Mon Sep 17 00:00:00 2001 From: Sebastien Plisson Date: Fri, 8 Jun 2018 10:18:25 -0700 Subject: [PATCH 09/10] Fix res => resp --- cmd/helm/install.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/helm/install.go b/cmd/helm/install.go index 60479064b..38df433b8 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -301,8 +301,8 @@ func (i *installCmd) run() error { // If this is a dry run, we can't display status. if i.dryRun { // This is special casing to avoid breaking backward compatibility: - if res.Release.Info.Description != "Dry run complete" { - fmt.Fprintf(os.Stdout, "WARNING: %s\n", res.Release.Info.Description) + if resp.Release.Info.Description != "Dry run complete" { + fmt.Fprintf(os.Stdout, "WARNING: %s\n", resp.Release.Info.Description) } return nil } From 7beac10a4d984bfc79f12937307ca378b3ccd191 Mon Sep 17 00:00:00 2001 From: Sebastien Plisson Date: Fri, 8 Jun 2018 13:50:59 -0700 Subject: [PATCH 10/10] Fix test to check if an error was returned (anything not nil) --- cmd/helm/helm_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/helm/helm_test.go b/cmd/helm/helm_test.go index 79b8c16f2..d80b1a2c2 100644 --- a/cmd/helm/helm_test.go +++ b/cmd/helm/helm_test.go @@ -50,8 +50,8 @@ func runReleaseCases(t *testing.T, tests []releaseCase, rcmd releaseCmd) { cmd := rcmd(c, &buf) cmd.ParseFlags(tt.flags) err := cmd.RunE(cmd, tt.args) - if (err != nil) != tt.err { - t.Errorf("expected error, got '%v'", err) + if (err == nil) && tt.err { + t.Errorf("expected error, got no error") } re := regexp.MustCompile(tt.expected) if !re.Match(buf.Bytes()) {