feat: make release version templatized (#671)

Allows the release version to be a Go template.
Resolves #669
This commit is contained in:
sgandon 2019-06-11 14:52:54 +02:00 committed by KUOKA Yusuke
parent 65d404b276
commit 11eda66eaa
2 changed files with 14 additions and 2 deletions

View File

@ -2,6 +2,7 @@ package state
import ( import (
"fmt" "fmt"
"github.com/roboll/helmfile/pkg/tmpl" "github.com/roboll/helmfile/pkg/tmpl"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
) )
@ -39,6 +40,14 @@ func (r ReleaseSpec) ExecuteTemplateExpressions(renderer *tmpl.FileRenderer) (*R
} }
} }
{
ts := result.Version
result.Version, err = renderer.RenderTemplateContentToString([]byte(ts))
if err != nil {
return nil, fmt.Errorf("failed executing template expressions in release \"%s\".version = \"%s\": %v", r.Name, ts, err)
}
}
for i, t := range result.Values { for i, t := range result.Values {
switch ts := t.(type) { switch ts := t.(type) {
case string: case string:

View File

@ -16,7 +16,7 @@ func TestHelmState_executeTemplates(t *testing.T) {
name: "Has template expressions in chart, values, and secrets", name: "Has template expressions in chart, values, and secrets",
input: ReleaseSpec{ input: ReleaseSpec{
Chart: "test-charts/{{ .Release.Name }}", Chart: "test-charts/{{ .Release.Name }}",
Version: "0.1", Version: "{{ .Release.Name }}-0.1",
Verify: nil, Verify: nil,
Name: "test-app", Name: "test-app",
Namespace: "test-namespace-{{ .Release.Name }}", Namespace: "test-namespace-{{ .Release.Name }}",
@ -25,7 +25,7 @@ func TestHelmState_executeTemplates(t *testing.T) {
}, },
want: ReleaseSpec{ want: ReleaseSpec{
Chart: "test-charts/test-app", Chart: "test-charts/test-app",
Version: "0.1", Version: "test-app-0.1",
Verify: nil, Verify: nil,
Name: "test-app", Name: "test-app",
Namespace: "test-namespace-test-app", Namespace: "test-namespace-test-app",
@ -71,6 +71,9 @@ func TestHelmState_executeTemplates(t *testing.T) {
if !reflect.DeepEqual(actual.Secrets, tt.want.Secrets) { if !reflect.DeepEqual(actual.Secrets, tt.want.Secrets) {
t.Errorf("expected %+v, got %+v", tt.want.Secrets, actual.Secrets) t.Errorf("expected %+v, got %+v", tt.want.Secrets, actual.Secrets)
} }
if !reflect.DeepEqual(actual.Version, tt.want.Version) {
t.Errorf("expected %+v, got %+v", tt.want.Version, actual.Version)
}
}) })
} }
} }