diff --git a/anonymize/anonymize_config_test.go b/anonymize/anonymize_config_test.go index b92cfd82c..adba7cead 100644 --- a/anonymize/anonymize_config_test.go +++ b/anonymize/anonymize_config_test.go @@ -432,8 +432,9 @@ func TestDo_globalConfiguration(t *testing.T) { Trace: true, DebugLogGeneratedTemplate: true, }, - Endpoint: "eureka Endpoint", - Delay: flaeg.Duration(30 * time.Second), + Endpoint: "eureka Endpoint", + Delay: flaeg.Duration(30 * time.Second), + RefreshSeconds: flaeg.Duration(30 * time.Second), } config.ECS = &ecs.Provider{ BaseProvider: provider.BaseProvider{ diff --git a/cmd/configuration.go b/cmd/configuration.go index bc6a0df03..cb73adbf8 100644 --- a/cmd/configuration.go +++ b/cmd/configuration.go @@ -166,7 +166,7 @@ func NewTraefikDefaultPointersConfiguration() *TraefikConfiguration { // default Eureka var defaultEureka eureka.Provider - defaultEureka.Delay = flaeg.Duration(30 * time.Second) + defaultEureka.RefreshSeconds = flaeg.Duration(30 * time.Second) // default ServiceFabric var defaultServiceFabric servicefabric.Provider diff --git a/configuration/configuration.go b/configuration/configuration.go index eaeaf94bb..c50d1a598 100644 --- a/configuration/configuration.go +++ b/configuration/configuration.go @@ -201,6 +201,13 @@ func (gc *GlobalConfiguration) SetEffectiveConfiguration(configFile string) { gc.LifeCycle.GraceTimeOut = gc.GraceTimeOut } + if gc.Eureka != nil { + if gc.Eureka.Delay != 0 { + log.Warn("Delay has been deprecated -- please use RefreshSeconds") + gc.Eureka.RefreshSeconds = gc.Eureka.Delay + } + } + if gc.Rancher != nil { // Ensure backwards compatibility for now if len(gc.Rancher.AccessKey) > 0 || diff --git a/docs/configuration/backends/eureka.md b/docs/configuration/backends/eureka.md index 2e7ab8173..5eb57edcc 100644 --- a/docs/configuration/backends/eureka.md +++ b/docs/configuration/backends/eureka.md @@ -21,7 +21,7 @@ endpoint = "http://my.eureka.server/eureka" # Optional # Default: 30s # -delay = "1m" +refreshSeconds = "1m" # Override default configuration template. # For advanced users :) diff --git a/provider/eureka/eureka.go b/provider/eureka/eureka.go index 42c926b6d..cb64f5d53 100644 --- a/provider/eureka/eureka.go +++ b/provider/eureka/eureka.go @@ -18,7 +18,8 @@ import ( type Provider struct { provider.BaseProvider `mapstructure:",squash" export:"true"` Endpoint string `description:"Eureka server endpoint"` - Delay flaeg.Duration `description:"Override default configuration time between refresh" export:"true"` + Delay flaeg.Duration `description:"Override default configuration time between refresh (Deprecated)" export:"true"` // Deprecated + RefreshSeconds flaeg.Duration `description:"Override default configuration time between refresh" export:"true"` } // Provide allows the eureka provider to provide configurations to traefik @@ -46,26 +47,28 @@ func (p *Provider) Provide(configurationChan chan<- types.ConfigMessage, pool *s Configuration: configuration, } - ticker := time.NewTicker(time.Duration(p.Delay)) - safe.Go(func() { - for t := range ticker.C { - log.Debugf("Refreshing Provider %s", t.String()) - - applications, err := client.GetApplications() - if err != nil { - log.Errorf("Failed to retrieve applications, error: %s", err) - continue - } - - configuration, err := p.buildConfiguration(applications) - if err != nil { - log.Errorf("Failed to refresh Provider configuration, error: %s", err) - continue - } - - configurationChan <- types.ConfigMessage{ - ProviderName: "eureka", - Configuration: configuration, + ticker := time.NewTicker(time.Duration(p.RefreshSeconds)) + pool.Go(func(stop chan bool) { + for { + select { + case t := <-ticker.C: + log.Debugf("Refreshing Provider %s", t.String()) + applications, err := client.GetApplications() + if err != nil { + log.Errorf("Failed to retrieve applications, error: %s", err) + continue + } + configuration, err := p.buildConfiguration(applications) + if err != nil { + log.Errorf("Failed to refresh Provider configuration, error: %s", err) + continue + } + configurationChan <- types.ConfigMessage{ + ProviderName: "eureka", + Configuration: configuration, + } + case <-stop: + return } } })