Check for dynamic tls updates on configuration preload
This commit is contained in:
parent
5d4423910d
commit
75e05ca142
2 changed files with 42 additions and 2 deletions
|
@ -181,11 +181,29 @@ func (p *Provider) loadFileConfig(filename string, parseTemplate bool) (*config.
|
||||||
} else {
|
} else {
|
||||||
configuration, err = p.DecodeConfiguration(fileContent)
|
configuration, err = p.DecodeConfiguration(fileContent)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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 {
|
if configuration == nil || configuration.Routers == nil && configuration.Middlewares == nil && configuration.Services == nil && configuration.TLS == nil {
|
||||||
configuration = &config.Configuration{
|
configuration = &config.Configuration{
|
||||||
Routers: make(map[string]*config.Router),
|
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),
|
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) {
|
func (p *Provider) loadFileConfigFromDirectory(ctx context.Context, directory string, configuration *config.Configuration) (*config.Configuration, error) {
|
||||||
|
|
|
@ -12,6 +12,7 @@ import (
|
||||||
"github.com/containous/traefik/config"
|
"github.com/containous/traefik/config"
|
||||||
"github.com/containous/traefik/safe"
|
"github.com/containous/traefik/safe"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ProvideTestCase struct {
|
type ProvideTestCase struct {
|
||||||
|
@ -336,3 +337,24 @@ func createTLS(n int) string {
|
||||||
}
|
}
|
||||||
return conf
|
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())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue