diff --git a/provider/provider.go b/provider/provider.go index be727db80..fbf4da04b 100644 --- a/provider/provider.go +++ b/provider/provider.go @@ -52,10 +52,6 @@ func (p *BaseProvider) MatchConstraints(tags []string) (bool, *types.Constraint) // GetConfiguration return the provider configuration using templating func (p *BaseProvider) GetConfiguration(defaultTemplateFile string, funcMap template.FuncMap, templateObjects interface{}) (*types.Configuration, error) { - var ( - buf []byte - err error - ) configuration := new(types.Configuration) var defaultFuncMap = sprig.TxtFuncMap() @@ -68,18 +64,13 @@ func (p *BaseProvider) GetConfiguration(defaultTemplateFile string, funcMap temp } tmpl := template.New(p.Filename).Funcs(defaultFuncMap) - if len(p.Filename) > 0 { - buf, err = ioutil.ReadFile(p.Filename) - if err != nil { - return nil, err - } - } else { - buf, err = autogen.Asset(defaultTemplateFile) - if err != nil { - return nil, err - } + + tmplContent, err := p.getTemplateContent(defaultTemplateFile) + if err != nil { + return nil, err } - _, err = tmpl.Parse(string(buf)) + + _, err = tmpl.Parse(tmplContent) if err != nil { return nil, err } @@ -100,6 +91,26 @@ func (p *BaseProvider) GetConfiguration(defaultTemplateFile string, funcMap temp 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 { return strings.Split(s, sep) } diff --git a/provider/provider_test.go b/provider/provider_test.go index 092320a4b..a85c3e8b8 100644 --- a/provider/provider_test.go +++ b/provider/provider_test.go @@ -8,6 +8,8 @@ import ( "text/template" "github.com/containous/traefik/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) type myProvider struct { @@ -431,3 +433,42 @@ func TestSprigFunctions(t *testing.T) { 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) +}