diff --git a/cmd/tiller/release_server.go b/cmd/tiller/release_server.go index 757c1bf95f911034799cbec4a7b31df36af5c0ea..00af55e5c82612851c0e7709e2f4d60e29f1f801 100644 --- a/cmd/tiller/release_server.go +++ b/cmd/tiller/release_server.go @@ -508,6 +508,16 @@ func validateYAML(data string) error { return yaml.Unmarshal([]byte(data), b) } +func (s *releaseServer) recordRelease(r *release.Release, reuse bool) { + if reuse { + if err := s.env.Releases.Update(r); err != nil { + log.Printf("warning: Failed to update release %q: %s", r.Name, err) + } + } else if err := s.env.Releases.Create(r); err != nil { + log.Printf("warning: Failed to record release %q: %s", r.Name, err) + } +} + // performRelease runs a release. func (s *releaseServer) performRelease(r *release.Release, req *services.InstallReleaseRequest) (*services.InstallReleaseResponse, error) { res := &services.InstallReleaseResponse{Release: r} @@ -530,9 +540,7 @@ func (s *releaseServer) performRelease(r *release.Release, req *services.Install if err := kubeCli.Create(r.Namespace, b); err != nil { r.Info.Status.Code = release.Status_FAILED log.Printf("warning: Release %q failed: %s", r.Name, err) - if err := s.env.Releases.Create(r); err != nil { - log.Printf("warning: Failed to record release %q: %s", r.Name, err) - } + s.recordRelease(r, req.ReuseName) return res, fmt.Errorf("release %s failed: %s", r.Name, err) } @@ -551,9 +559,7 @@ func (s *releaseServer) performRelease(r *release.Release, req *services.Install // One possible strategy would be to do a timed retry to see if we can get // this stored in the future. r.Info.Status.Code = release.Status_DEPLOYED - if err := s.env.Releases.Create(r); err != nil { - log.Printf("warning: Failed to record release %q: %s", r.Name, err) - } + s.recordRelease(r, req.ReuseName) return res, nil } diff --git a/cmd/tiller/release_server_test.go b/cmd/tiller/release_server_test.go index 27f924f2d877a439496d4c8bdb704cc029785c0e..a9d042ab58113630f439b70c6cd85c14ece0afa7 100644 --- a/cmd/tiller/release_server_test.go +++ b/cmd/tiller/release_server_test.go @@ -451,6 +451,15 @@ func TestInstallReleaseReuseName(t *testing.T) { if res.Release.Name != rel.Name { t.Errorf("expected %q, got %q", rel.Name, res.Release.Name) } + + getreq := &services.GetReleaseStatusRequest{Name: rel.Name} + getres, err := rs.GetReleaseStatus(c, getreq) + if err != nil { + t.Errorf("Failed to retrieve release: %s", err) + } + if getres.Info.Status.Code != release.Status_DEPLOYED { + t.Errorf("Release status is %q", getres.Info.Status.Code) + } } func TestUpdateRelease(t *testing.T) {