mirror of
https://github.com/helmfile/helmfile.git
synced 2026-10-18 19:01:50 +02:00
fix: Keep backward-compatibility broken after introduction of values file template (#257)
Fixes #249
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package valuesfile
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/roboll/helmfile/tmpl"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type renderer struct {
|
||||
readFile func(string) ([]byte, error)
|
||||
tmplFileRenderer tmpl.FileRenderer
|
||||
}
|
||||
|
||||
func NewRenderer(readFile func(filename string) ([]byte, error)) *renderer {
|
||||
return &renderer{
|
||||
readFile: readFile,
|
||||
tmplFileRenderer: tmpl.NewFileRenderer(readFile),
|
||||
}
|
||||
}
|
||||
|
||||
func (r *renderer) RenderToBytes(path string) ([]byte, error) {
|
||||
var yamlBytes []byte
|
||||
splits := strings.Split(path, ".")
|
||||
if len(splits) > 0 && splits[len(splits)-1] == "gotmpl" {
|
||||
yamlBuf, err := r.tmplFileRenderer.RenderTemplateFileToBuffer(path)
|
||||
if err != nil {
|
||||
|
||||
return nil, fmt.Errorf("failed to render [%s], because of %v", path, err)
|
||||
}
|
||||
yamlBytes = yamlBuf.Bytes()
|
||||
} else {
|
||||
var err error
|
||||
yamlBytes, err = r.readFile(path)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load [%s]: %v", path, err)
|
||||
}
|
||||
}
|
||||
return yamlBytes, nil
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package valuesfile
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRenderToBytes_Gotmpl(t *testing.T) {
|
||||
valuesYamlTmplContent := `foo:
|
||||
bar: '{{ readFile "data.txt" }}'
|
||||
`
|
||||
dataFileContent := "FOO_BAR"
|
||||
expected := `foo:
|
||||
bar: 'FOO_BAR'
|
||||
`
|
||||
dataFile := "data.txt"
|
||||
valuesTmplFile := "values.yaml.gotmpl"
|
||||
r := NewRenderer(func(filename string) ([]byte, error) {
|
||||
switch filename {
|
||||
case valuesTmplFile:
|
||||
return []byte(valuesYamlTmplContent), nil
|
||||
case dataFile:
|
||||
return []byte(dataFileContent), nil
|
||||
}
|
||||
return nil, fmt.Errorf("unexpected filename: expected=%v or %v, actual=%s", dataFile, valuesTmplFile, filename)
|
||||
})
|
||||
buf, err := r.RenderToBytes(valuesTmplFile)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
actual := string(buf)
|
||||
if !reflect.DeepEqual(actual, expected) {
|
||||
t.Errorf("unexpected result: expected=%v, actual=%v", expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRenderToBytes_Yaml(t *testing.T) {
|
||||
valuesYamlContent := `foo:
|
||||
bar: '{{ readFile "data.txt" }}'
|
||||
`
|
||||
expected := `foo:
|
||||
bar: '{{ readFile "data.txt" }}'
|
||||
`
|
||||
valuesFile := "values.yaml"
|
||||
r := NewRenderer(func(filename string) ([]byte, error) {
|
||||
switch filename {
|
||||
case valuesFile:
|
||||
return []byte(valuesYamlContent), nil
|
||||
}
|
||||
return nil, fmt.Errorf("unexpected filename: expected=%v, actual=%s", valuesFile, filename)
|
||||
})
|
||||
buf, err := r.RenderToBytes(valuesFile)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
actual := string(buf)
|
||||
if !reflect.DeepEqual(actual, expected) {
|
||||
t.Errorf("unexpected result: expected=%v, actual=%v", expected, actual)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user