diff --git a/cmd/helm/status.go b/cmd/helm/status.go index 4d8c7bc5c..a3403a824 100644 --- a/cmd/helm/status.go +++ b/cmd/helm/status.go @@ -83,7 +83,9 @@ func PrintStatus(out io.Writer, res *services.GetReleaseStatusResponse) { fmt.Fprintf(out, "Details: %s\n", res.Info.Status.Details) } fmt.Fprintf(out, "\n") - fmt.Fprintf(out, "Resources:\n%s\n", res.Info.Status.Resources) + if len(res.Info.Status.Resources) > 0 { + fmt.Fprintf(out, "Resources:\n%s\n", res.Info.Status.Resources) + } if len(res.Info.Status.Notes) > 0 { fmt.Fprintf(out, "Notes:\n%s\n", res.Info.Status.Notes) } diff --git a/cmd/tiller/release_server.go b/cmd/tiller/release_server.go index eb1cb158a..757c1bf95 100644 --- a/cmd/tiller/release_server.go +++ b/cmd/tiller/release_server.go @@ -190,17 +190,22 @@ func (s *releaseServer) GetReleaseStatus(c ctx.Context, req *services.GetRelease return nil, errors.New("release chart is missing") } + sc := rel.Info.Status.Code + statusResp := &services.GetReleaseStatusResponse{Info: rel.Info, Namespace: rel.Namespace} + // Ok, we got the status of the release as we had jotted down, now we need to match the // manifest we stashed away with reality from the cluster. kubeCli := s.env.KubeClient resp, err := kubeCli.Get(rel.Namespace, bytes.NewBufferString(rel.Manifest)) - if err != nil { + if sc == release.Status_DELETED || sc == release.Status_FAILED { + // Skip errors if this is already deleted or failed. + return statusResp, nil + } else if err != nil { log.Printf("warning: Get for %s failed: %v", rel.Name, err) return nil, err } rel.Info.Status.Resources = resp - - return &services.GetReleaseStatusResponse{Info: rel.Info, Namespace: rel.Namespace}, nil + return statusResp, nil } func (s *releaseServer) GetReleaseContent(c ctx.Context, req *services.GetReleaseContentRequest) (*services.GetReleaseContentResponse, error) { diff --git a/cmd/tiller/release_server_test.go b/cmd/tiller/release_server_test.go index 3e2644c56..27f924f2d 100644 --- a/cmd/tiller/release_server_test.go +++ b/cmd/tiller/release_server_test.go @@ -711,6 +711,25 @@ func TestGetReleaseStatus(t *testing.T) { } } +func TestGetReleaseStatusDeleted(t *testing.T) { + c := context.Background() + rs := rsFixture() + rel := releaseStub() + rel.Info.Status.Code = release.Status_DELETED + if err := rs.env.Releases.Create(rel); err != nil { + t.Fatalf("Could not store mock release: %s", err) + } + + res, err := rs.GetReleaseStatus(c, &services.GetReleaseStatusRequest{Name: rel.Name}) + if err != nil { + t.Errorf("Error getting release content: %s", err) + } + + if res.Info.Status.Code != release.Status_DELETED { + t.Errorf("Expected %d, got %d", release.Status_DELETED, res.Info.Status.Code) + } +} + func TestListReleases(t *testing.T) { rs := rsFixture() num := 7