Check for dynamic tls updates on configuration preload

This commit is contained in:
Foivos Filippopoulos 2019-01-29 15:46:09 +00:00 committed by Traefiker Bot
parent 5d4423910d
commit 75e05ca142
2 changed files with 42 additions and 2 deletions

View file

@ -181,11 +181,29 @@ func (p *Provider) loadFileConfig(filename string, parseTemplate bool) (*config.
} else {
configuration, err = p.DecodeConfiguration(fileContent)
}
if err != nil {
return nil, err
}
var tlsConfigs []*tls.Configuration
for _, conf := range configuration.TLS {
bytes, err := conf.Certificate.CertFile.Read()
if err != nil {
log.Error(err)
continue
}
conf.Certificate.CertFile = tls.FileOrContent(string(bytes))
bytes, err = conf.Certificate.KeyFile.Read()
if err != nil {
log.Error(err)
continue
}
conf.Certificate.KeyFile = tls.FileOrContent(string(bytes))
tlsConfigs = append(tlsConfigs, conf)
}
configuration.TLS = tlsConfigs
if configuration == nil || configuration.Routers == nil && configuration.Middlewares == nil && configuration.Services == nil && configuration.TLS == nil {
configuration = &config.Configuration{
Routers: make(map[string]*config.Router),
@ -193,7 +211,7 @@ func (p *Provider) loadFileConfig(filename string, parseTemplate bool) (*config.
Services: make(map[string]*config.Service),
}
}
return configuration, err
return configuration, nil
}
func (p *Provider) loadFileConfigFromDirectory(ctx context.Context, directory string, configuration *config.Configuration) (*config.Configuration, error) {

View file

@ -12,6 +12,7 @@ import (
"github.com/containous/traefik/config"
"github.com/containous/traefik/safe"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
type ProvideTestCase struct {
@ -336,3 +337,24 @@ func createTLS(n int) string {
}
return conf
}
func TestTLSContent(t *testing.T) {
tempDir := createTempDir(t, "testdir")
defer os.Remove(tempDir)
fileTLS := createRandomFile(t, tempDir, "CONTENT")
fileConfig := createRandomFile(t, tempDir, `
[[tls]]
entryPoints = ["https"]
[tls.certificate]
certFile = "`+fileTLS.Name()+`"
keyFile = "`+fileTLS.Name()+`"
`)
provider := &Provider{}
configuration, err := provider.loadFileConfig(fileConfig.Name(), true)
require.NoError(t, err)
require.Equal(t, "CONTENT", configuration.TLS[0].Certificate.CertFile.String())
require.Equal(t, "CONTENT", configuration.TLS[0].Certificate.KeyFile.String())
}