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()) { diff --git a/cmd/helm/install.go b/cmd/helm/install.go index d1c24c213..38df433b8 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,27 +278,37 @@ 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 { + i.printRelease(res.Release) + } + } else { + rel := resp.GetRelease() + if rel == nil { + return nil + } + i.printRelease(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 { // 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 } // 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) } @@ -523,7 +533,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 } 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) } 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)