Support template as raw string.
This commit is contained in:
parent
8719f2836e
commit
722f299306
2 changed files with 67 additions and 15 deletions
|
@ -52,10 +52,6 @@ func (p *BaseProvider) MatchConstraints(tags []string) (bool, *types.Constraint)
|
||||||
|
|
||||||
// GetConfiguration return the provider configuration using templating
|
// GetConfiguration return the provider configuration using templating
|
||||||
func (p *BaseProvider) GetConfiguration(defaultTemplateFile string, funcMap template.FuncMap, templateObjects interface{}) (*types.Configuration, error) {
|
func (p *BaseProvider) GetConfiguration(defaultTemplateFile string, funcMap template.FuncMap, templateObjects interface{}) (*types.Configuration, error) {
|
||||||
var (
|
|
||||||
buf []byte
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
configuration := new(types.Configuration)
|
configuration := new(types.Configuration)
|
||||||
|
|
||||||
var defaultFuncMap = sprig.TxtFuncMap()
|
var defaultFuncMap = sprig.TxtFuncMap()
|
||||||
|
@ -68,18 +64,13 @@ func (p *BaseProvider) GetConfiguration(defaultTemplateFile string, funcMap temp
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpl := template.New(p.Filename).Funcs(defaultFuncMap)
|
tmpl := template.New(p.Filename).Funcs(defaultFuncMap)
|
||||||
if len(p.Filename) > 0 {
|
|
||||||
buf, err = ioutil.ReadFile(p.Filename)
|
tmplContent, err := p.getTemplateContent(defaultTemplateFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
|
||||||
} else {
|
|
||||||
buf, err = autogen.Asset(defaultTemplateFile)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
_, err = tmpl.Parse(string(buf))
|
|
||||||
|
_, err = tmpl.Parse(tmplContent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -100,6 +91,26 @@ func (p *BaseProvider) GetConfiguration(defaultTemplateFile string, funcMap temp
|
||||||
return configuration, nil
|
return configuration, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *BaseProvider) getTemplateContent(defaultTemplateFile string) (string, error) {
|
||||||
|
if len(p.Filename) > 0 {
|
||||||
|
buf, err := ioutil.ReadFile(p.Filename)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(buf), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.HasSuffix(defaultTemplateFile, ".tmpl") {
|
||||||
|
buf, err := autogen.Asset(defaultTemplateFile)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(buf), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultTemplateFile, nil
|
||||||
|
}
|
||||||
|
|
||||||
func split(sep, s string) []string {
|
func split(sep, s string) []string {
|
||||||
return strings.Split(s, sep)
|
return strings.Split(s, sep)
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,8 @@ import (
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
"github.com/containous/traefik/types"
|
"github.com/containous/traefik/types"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
type myProvider struct {
|
type myProvider struct {
|
||||||
|
@ -431,3 +433,42 @@ func TestSprigFunctions(t *testing.T) {
|
||||||
t.Fatal("Frontend frontend-1 should exists, but it not")
|
t.Fatal("Frontend frontend-1 should exists, but it not")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBaseProvider_GetConfiguration(t *testing.T) {
|
||||||
|
baseProvider := BaseProvider{}
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
defaultTemplateFile string
|
||||||
|
expectedContent string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
defaultTemplateFile: "templates/docker.tmpl",
|
||||||
|
expectedContent: readTemplateFile(t, "./../templates/docker.tmpl"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
defaultTemplateFile: `template content`,
|
||||||
|
expectedContent: `template content`,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range testCases {
|
||||||
|
test := test
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
|
||||||
|
content, err := baseProvider.getTemplateContent(test.defaultTemplateFile)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
assert.Equal(t, test.expectedContent, content)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func readTemplateFile(t *testing.T, path string) string {
|
||||||
|
t.Helper()
|
||||||
|
expectedContent, err := ioutil.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
return string(expectedContent)
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue