From 223e0480d119c3be010539094b2d16f7b91d2b19 Mon Sep 17 00:00:00 2001 From: Matt Butcher Date: Tue, 4 Oct 2016 17:04:46 -0600 Subject: [PATCH] feat(tiller): re-use values during upgrade When `helm install -f foo.yaml bar` is called, and then the release is upgraded with `helm upgrade happy-panda bar`, this will now re-use the values that were submitted with `-f foo.yaml`. The same is true for values specified with `--set`. Closes #1227 --- cmd/tiller/release_server.go | 6 ++++++ cmd/tiller/release_server_test.go | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/cmd/tiller/release_server.go b/cmd/tiller/release_server.go index 4260bd914..7a05524d1 100644 --- a/cmd/tiller/release_server.go +++ b/cmd/tiller/release_server.go @@ -341,6 +341,12 @@ func (s *releaseServer) prepareUpdate(req *services.UpdateReleaseRequest) (*rele return nil, nil, err } + // If new values were not supplied in the upgrade, re-use the existing values. + if (req.Values == nil || req.Values.Raw == "") && currentRelease.Config != nil && currentRelease.Config.Raw != "" { + log.Printf("Copying values from %s (v%d) to new release.", currentRelease.Name, currentRelease.Version) + req.Values = currentRelease.Config + } + ts := timeconv.Now() options := chartutil.ReleaseOptions{ Name: req.Name, diff --git a/cmd/tiller/release_server_test.go b/cmd/tiller/release_server_test.go index 3da3a6173..d63a52e42 100644 --- a/cmd/tiller/release_server_test.go +++ b/cmd/tiller/release_server_test.go @@ -110,7 +110,7 @@ func namedReleaseStub(name string, status release.Status_Code) *release.Release Status: &release.Status{Code: status}, }, Chart: chartStub(), - Config: &chart.Config{Raw: `name = "value"`}, + Config: &chart.Config{Raw: `name: value`}, Version: 1, Hooks: []*release.Hook{ { @@ -568,6 +568,12 @@ func TestUpdateRelease(t *testing.T) { t.Errorf("No manifest returned: %v", res.Release) } + if res.Release.Config == nil { + t.Errorf("Got release without config: %#v", res.Release) + } else if res.Release.Config.Raw != rel.Config.Raw { + t.Errorf("Expected release values %q, got %q", rel.Config.Raw, res.Release.Config.Raw) + } + if len(updated.Manifest) == 0 { t.Errorf("Expected manifest in %v", res) }