diff --git a/cmd/healthcheck/healthcheck.go b/cmd/healthcheck/healthcheck.go index 8784f5d60..5bbc09eb0 100644 --- a/cmd/healthcheck/healthcheck.go +++ b/cmd/healthcheck/healthcheck.go @@ -24,7 +24,7 @@ func NewCmd(traefikConfiguration *static.Configuration, loaders []cli.ResourceLo func runCmd(traefikConfiguration *static.Configuration) func(_ []string) error { return func(_ []string) error { - traefikConfiguration.SetEffectiveConfiguration("") + traefikConfiguration.SetEffectiveConfiguration() resp, errPing := Do(*traefikConfiguration) if resp != nil { diff --git a/cmd/traefik/traefik.go b/cmd/traefik/traefik.go index d7f346593..1c4410681 100644 --- a/cmd/traefik/traefik.go +++ b/cmd/traefik/traefik.go @@ -53,7 +53,7 @@ Complete documentation is available at https://traefik.io`, Configuration: tConfig, Resources: loaders, Run: func(_ []string) error { - return runCmd(&tConfig.Configuration, cli.GetConfigFile(loaders)) + return runCmd(&tConfig.Configuration) }, } @@ -78,7 +78,7 @@ Complete documentation is available at https://traefik.io`, os.Exit(0) } -func runCmd(staticConfiguration *static.Configuration, configFile string) error { +func runCmd(staticConfiguration *static.Configuration) error { configureLogging(staticConfiguration) http.DefaultTransport.(*http.Transport).Proxy = http.ProxyFromEnvironment @@ -87,7 +87,7 @@ func runCmd(staticConfiguration *static.Configuration, configFile string) error log.WithoutContext().Errorf("Could not set roundrobin default weight: %v", err) } - staticConfiguration.SetEffectiveConfiguration(configFile) + staticConfiguration.SetEffectiveConfiguration() staticConfiguration.ValidateConfiguration() log.WithoutContext().Infof("Traefik version %s built on %s", version.Version, version.BuildDate) diff --git a/docs/content/middlewares/overview.md b/docs/content/middlewares/overview.md index 102f10d03..9b21ecd3e 100644 --- a/docs/content/middlewares/overview.md +++ b/docs/content/middlewares/overview.md @@ -81,9 +81,6 @@ labels: ```toml tab="File" # As Toml Configuration File -[providers] - [providers.file] - [http.routers] [http.routers.router1] service = "myService" @@ -128,9 +125,6 @@ and therefore this specification would be ignored even if present. Declaring the add-foo-prefix in the file provider. ```toml - [providers] - [providers.file] - [http.middlewares] [http.middlewares.add-foo-prefix.addPrefix] prefix = "/foo" diff --git a/docs/content/providers/file.md b/docs/content/providers/file.md index 689238e05..48f9a62a0 100644 --- a/docs/content/providers/file.md +++ b/docs/content/providers/file.md @@ -6,7 +6,6 @@ Good Old Configuration File The file provider lets you define the [dynamic configuration](./overview.md) in a TOML or YAML file. You can write these configuration elements: -* At the end of the main Traefik configuration file (by default: `traefik.toml`/`traefik.yml`/`traefik.yaml`). * In [a dedicated file](#filename) * In [several dedicated files](#directory) @@ -22,13 +21,19 @@ You can write these configuration elements: Enabling the file provider: - ```toml tab="TOML" + ```toml tab="File (TOML)" [providers.file] + filename = "/my/path/to/dynamic-conf.toml" ``` - ```yaml tab="YAML" + ```yaml tab="File (YAML)" providers: - file: {} + file: + filename: "/my/path/to/dynamic-conf.yml" + ``` + + ```bash tab="CLI" + --providers.file.filename=/my/path/to/dynamic_conf.toml ``` Declaring Routers, Middlewares & Services: @@ -102,16 +107,20 @@ _Optional_ Defines the path of the configuration file. -```toml tab="TOML" +```toml tab="File (TOML)" [providers] [providers.file] - filename = "rules.toml" + filename = "dynamic_conf.toml" ``` -```yaml tab="YAML" +```yaml tab="File (YAML)" providers: file: - filename: rules.yaml + filename: dynamic_conf.yml +``` + +```bash tab="CLI" +--providers.file.filename=dynamic_conf.toml ``` ### `directory` @@ -120,18 +129,22 @@ _Optional_ Defines the directory that contains the configuration files. -```toml tab="TOML" +```toml tab="File (TOML)" [providers] [providers.file] directory = "/path/to/config" ``` -```yaml tab="YAML" +```yaml tab="File (YAML)" providers: file: directory: /path/to/config ``` +```bash tab="CLI" +--providers.file.directory=/path/to/config +``` + ### `watch` _Optional_ @@ -139,20 +152,25 @@ _Optional_ Set the `watch` option to `true` to allow Traefik to automatically watch for file changes. It works with both the `filename` and the `directory` options. -```toml tab="TOML" +```toml tab="File (TOML)" [providers] [providers.file] - filename = "rules.toml" + filename = "dynamic_conf.toml" watch = true ``` -```yaml tab="YAML" +```yaml tab="File (YAML)" providers: file: - filename: rules.yml + filename: dynamic_conf.yml watch: true ``` +```bash tab="CLI" +--providers.file.filename=dynamic_conf.toml +--providers.file.watch=true +``` + ### Go Templating !!! warning diff --git a/docs/content/reference/static-configuration/cli-ref.md b/docs/content/reference/static-configuration/cli-ref.md index e7c9d66d0..8f167ade0 100644 --- a/docs/content/reference/static-configuration/cli-ref.md +++ b/docs/content/reference/static-configuration/cli-ref.md @@ -285,9 +285,6 @@ Use the ip address from the bound port, rather than from the inner network. (Def `--providers.docker.watch`: Watch provider. (Default: ```true```) -`--providers.file`: -Enable File backend with default settings. (Default: ```false```) - `--providers.file.debugloggeneratedtemplate`: Enable debug logging of generated configuration template. (Default: ```false```) diff --git a/docs/content/reference/static-configuration/env-ref.md b/docs/content/reference/static-configuration/env-ref.md index c8021d8c3..ed0b45b3b 100644 --- a/docs/content/reference/static-configuration/env-ref.md +++ b/docs/content/reference/static-configuration/env-ref.md @@ -285,9 +285,6 @@ Use the ip address from the bound port, rather than from the inner network. (Def `TRAEFIK_PROVIDERS_DOCKER_WATCH`: Watch provider. (Default: ```true```) -`TRAEFIK_PROVIDERS_FILE`: -Enable File backend with default settings. (Default: ```false```) - `TRAEFIK_PROVIDERS_FILE_DEBUGLOGGENERATEDTEMPLATE`: Enable debug logging of generated configuration template. (Default: ```false```) diff --git a/docs/content/routing/overview.md b/docs/content/routing/overview.md index d7bd5978e..5086b8ca1 100644 --- a/docs/content/routing/overview.md +++ b/docs/content/routing/overview.md @@ -35,6 +35,7 @@ Static configuration: [providers] # Enable the file provider to define routers / middlewares / services in a file [providers.file] + filename = "dynamic_conf.toml" ``` ```yaml tab="File (YAML)" @@ -45,7 +46,8 @@ entryPoints: providers: # Enable the file provider to define routers / middlewares / services in a file - file: {} + file: + filename: dynamic_conf.yml ``` ```bash tab="CLI" @@ -53,7 +55,7 @@ providers: --entryPoints.web.address=:8081 # Enable the file provider to define routers / middlewares / services in a file ---providers.file +--providers.file.filename=dynamic_conf.toml ``` Dynamic configuration: @@ -124,7 +126,7 @@ http: Static configuration: - ```toml tab="TOML" + ```toml tab="File (TOML)" [entryPoints] [entryPoints.web] # Listen on port 8081 for incoming requests @@ -133,16 +135,18 @@ http: [providers] # Enable the file provider to define routers / middlewares / services in a file [providers.file] + filename = "dynamic_conf.toml" ``` - ```yaml tab="YAML" + ```yaml tab="File (YAML)" entryPoints: web: # Listen on port 8081 for incoming requests address: :8081 providers: # Enable the file provider to define routers / middlewares / services in a file - file: {} + file: + filename: dynamic_conf.yml ``` ```bash tab="CLI" @@ -150,7 +154,7 @@ http: --entryPoints.web.address=":8081" # Enable the file provider to define routers / middlewares / services in a file - --providers.file + --providers.file.filename=dynamic_conf.toml ``` Dynamic configuration: diff --git a/docs/content/user-guides/grpc.md b/docs/content/user-guides/grpc.md index 9f8d586f6..9012add8e 100644 --- a/docs/content/user-guides/grpc.md +++ b/docs/content/user-guides/grpc.md @@ -6,17 +6,40 @@ This section explains how to use Traefik as reverse proxy for gRPC application. ### Traefik Configuration -```toml tab="TOML" -## static configuration ## +Static configuration: +```toml tab="File (TOML)" [entryPoints] - [entryPoints.http] + [entryPoints.web] address = ":80" [api] [providers.file] + filename = "dynamic_conf.toml" +``` +```yaml tab="File (YAML)" +entryPoints: + web: + address: :80 + +providers: + file: + filename: dynamic_conf.yml + +api: {} +``` + +```yaml tab="CLI" +--entryPoints.web.address=":80" +--providers.file.filename=dynamic_conf.toml +--api +``` + +`dynamic_conf.{toml,yml}`: + +```toml tab="TOML" ## dynamic configuration ## [http] @@ -34,17 +57,6 @@ This section explains how to use Traefik as reverse proxy for gRPC application. ``` ```yaml tab="YAML" -## static configuration ## - -entryPoints: - http: - address: :80 - -providers: - file: {} - -api: {} - ## dynamic configuration ## http: @@ -105,11 +117,11 @@ Common Name (e.g. server FQDN or YOUR name) []: frontend.local At last, we configure our Traefik instance to use both self-signed certificates. -```toml tab="TOML" -## static configuration ## +Static configuration: +```toml tab="File (TOML)" [entryPoints] - [entryPoints.https] + [entryPoints.websecure] address = ":4443" @@ -120,7 +132,37 @@ At last, we configure our Traefik instance to use both self-signed certificates. [api] [provider.file] + filename = "dynamic_conf.toml" +``` +```yaml tab="File (YAML)" +entryPoints: + websecure: + address: :4443 + +serversTransport: + # For secure connection on backend.local + rootCAs: + - ./backend.cert + +providers: + file: + filename: dynamic_conf.yml + +api: {} +``` + +```yaml tab="CLI" +--entryPoints.websecure.address=":4443" +# For secure connection on backend.local +--serversTransport.rootCAs=./backend.cert +--providers.file.filename=dynamic_conf.toml +--api +``` + +`dynamic_conf.{toml,yml}`: + +```toml tab="TOML" ## dynamic configuration ## [http] @@ -146,22 +188,6 @@ At last, we configure our Traefik instance to use both self-signed certificates. ``` ```yaml tab="YAML" -## static configuration ## - -entryPoints: - https: - address: :4443 - -serversTransport: - # For secure connection on backend.local - rootCAs: - - ./backend.cert - -providers: - file: {} - -api: {} - ## dynamic configuration ## http: diff --git a/integration/file_test.go b/integration/file_test.go index df43b1b61..0a9db2266 100644 --- a/integration/file_test.go +++ b/integration/file_test.go @@ -2,6 +2,7 @@ package integration import ( "net/http" + "os" "time" "github.com/containous/traefik/integration/try" @@ -14,12 +15,13 @@ type FileSuite struct{ BaseSuite } func (s *FileSuite) SetUpSuite(c *check.C) { s.createComposeProject(c, "file") - s.composeProject.Start(c) } func (s *FileSuite) TestSimpleConfiguration(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/file/simple.toml")) + file := s.adaptFile(c, "fixtures/file/simple.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) diff --git a/integration/fixtures/acme/acme_base.toml b/integration/fixtures/acme/acme_base.toml index 0628cc57b..ee2755545 100644 --- a/integration/fixtures/acme/acme_base.toml +++ b/integration/fixtures/acme/acme_base.toml @@ -39,8 +39,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/acme/acme_tls.toml b/integration/fixtures/acme/acme_tls.toml index a977c21ac..7addd0731 100644 --- a/integration/fixtures/acme/acme_tls.toml +++ b/integration/fixtures/acme/acme_tls.toml @@ -39,8 +39,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/error_pages/error.toml b/integration/fixtures/error_pages/error.toml index 801b28152..12b38bca8 100644 --- a/integration/fixtures/error_pages/error.toml +++ b/integration/fixtures/error_pages/error.toml @@ -9,8 +9,8 @@ [entryPoints.web] address = ":8080" -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/error_pages/simple.toml b/integration/fixtures/error_pages/simple.toml index 284ad1779..a734098b9 100644 --- a/integration/fixtures/error_pages/simple.toml +++ b/integration/fixtures/error_pages/simple.toml @@ -9,8 +9,8 @@ [entryPoints.web] address = ":8080" -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/file/56-simple-panic.toml b/integration/fixtures/file/56-simple-panic.toml index a890ef539..09aadf0a1 100644 --- a/integration/fixtures/file/56-simple-panic.toml +++ b/integration/fixtures/file/56-simple-panic.toml @@ -9,5 +9,5 @@ [entryPoints.web] address = ":8000" -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" diff --git a/integration/fixtures/file/simple-hosts.toml b/integration/fixtures/file/simple-hosts.toml index 91d379c01..e2f5485a1 100644 --- a/integration/fixtures/file/simple-hosts.toml +++ b/integration/fixtures/file/simple-hosts.toml @@ -9,8 +9,8 @@ [entryPoints.web] address = ":8000" -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/file/simple.toml b/integration/fixtures/file/simple.toml index 96a6dea17..736eb4f2b 100644 --- a/integration/fixtures/file/simple.toml +++ b/integration/fixtures/file/simple.toml @@ -9,8 +9,8 @@ [entryPoints.web] address = ":8000" -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/grpc/config.toml b/integration/fixtures/grpc/config.toml index 7e8277d8a..5ebf5e946 100644 --- a/integration/fixtures/grpc/config.toml +++ b/integration/fixtures/grpc/config.toml @@ -14,8 +14,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/grpc/config_h2c.toml b/integration/fixtures/grpc/config_h2c.toml index 096a20e78..8dfcc99da 100644 --- a/integration/fixtures/grpc/config_h2c.toml +++ b/integration/fixtures/grpc/config_h2c.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/grpc/config_h2c_termination.toml b/integration/fixtures/grpc/config_h2c_termination.toml index ee48c3334..10fbdaeaa 100644 --- a/integration/fixtures/grpc/config_h2c_termination.toml +++ b/integration/fixtures/grpc/config_h2c_termination.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/grpc/config_insecure.toml b/integration/fixtures/grpc/config_insecure.toml index 053cc4b63..417ebdd22 100644 --- a/integration/fixtures/grpc/config_insecure.toml +++ b/integration/fixtures/grpc/config_insecure.toml @@ -14,8 +14,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/grpc/config_retry.toml b/integration/fixtures/grpc/config_retry.toml index 72f5b5e09..dfd316ea5 100644 --- a/integration/fixtures/grpc/config_retry.toml +++ b/integration/fixtures/grpc/config_retry.toml @@ -14,8 +14,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/headers/cors.toml b/integration/fixtures/headers/cors.toml index 32b8d2995..263966e39 100644 --- a/integration/fixtures/headers/cors.toml +++ b/integration/fixtures/headers/cors.toml @@ -9,8 +9,8 @@ [entryPoints.web] address = ":8000" -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/healthcheck/multiple-entrypoints.toml b/integration/fixtures/healthcheck/multiple-entrypoints.toml index 12e543186..3c1d60f3c 100644 --- a/integration/fixtures/healthcheck/multiple-entrypoints.toml +++ b/integration/fixtures/healthcheck/multiple-entrypoints.toml @@ -13,8 +13,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/healthcheck/port_overload.toml b/integration/fixtures/healthcheck/port_overload.toml index 892e5b463..40b24391b 100644 --- a/integration/fixtures/healthcheck/port_overload.toml +++ b/integration/fixtures/healthcheck/port_overload.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/healthcheck/simple.toml b/integration/fixtures/healthcheck/simple.toml index 0109337fc..92bc1e4d7 100644 --- a/integration/fixtures/healthcheck/simple.toml +++ b/integration/fixtures/healthcheck/simple.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/https/clientca/https_1ca1config.toml b/integration/fixtures/https/clientca/https_1ca1config.toml index e149185b3..f52896e55 100644 --- a/integration/fixtures/https/clientca/https_1ca1config.toml +++ b/integration/fixtures/https/clientca/https_1ca1config.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/https/clientca/https_2ca1config.toml b/integration/fixtures/https/clientca/https_2ca1config.toml index d12915e85..34ea565e9 100644 --- a/integration/fixtures/https/clientca/https_2ca1config.toml +++ b/integration/fixtures/https/clientca/https_2ca1config.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/https/clientca/https_2ca2config.toml b/integration/fixtures/https/clientca/https_2ca2config.toml index 5a15e574f..bec6abde7 100644 --- a/integration/fixtures/https/clientca/https_2ca2config.toml +++ b/integration/fixtures/https/clientca/https_2ca2config.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/https/dynamic_https_sni_default_cert.toml b/integration/fixtures/https/dynamic_https_sni_default_cert.toml index e45d40076..05f3c1b6d 100644 --- a/integration/fixtures/https/dynamic_https_sni_default_cert.toml +++ b/integration/fixtures/https/dynamic_https_sni_default_cert.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/https/https_redirect.toml b/integration/fixtures/https/https_redirect.toml index eed285020..e9e9f78bc 100644 --- a/integration/fixtures/https/https_redirect.toml +++ b/integration/fixtures/https/https_redirect.toml @@ -14,8 +14,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/https/https_sni.toml b/integration/fixtures/https/https_sni.toml index 561d5f3b5..c5212af6a 100644 --- a/integration/fixtures/https/https_sni.toml +++ b/integration/fixtures/https/https_sni.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/https/https_sni_case_insensitive_dynamic.toml b/integration/fixtures/https/https_sni_case_insensitive_dynamic.toml index 28b22f45a..614a54ee1 100644 --- a/integration/fixtures/https/https_sni_case_insensitive_dynamic.toml +++ b/integration/fixtures/https/https_sni_case_insensitive_dynamic.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/https/https_sni_default_cert.toml b/integration/fixtures/https/https_sni_default_cert.toml index e45d40076..05f3c1b6d 100644 --- a/integration/fixtures/https/https_sni_default_cert.toml +++ b/integration/fixtures/https/https_sni_default_cert.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/https/https_sni_strict.toml b/integration/fixtures/https/https_sni_strict.toml index 1f15bd6cc..9ada0a5e6 100644 --- a/integration/fixtures/https/https_sni_strict.toml +++ b/integration/fixtures/https/https_sni_strict.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/https/https_tls_options.toml b/integration/fixtures/https/https_tls_options.toml index d81ac1a65..4e7dfde43 100644 --- a/integration/fixtures/https/https_tls_options.toml +++ b/integration/fixtures/https/https_tls_options.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/https/rootcas/https.toml b/integration/fixtures/https/rootcas/https.toml index ae85cfaeb..54b502faa 100644 --- a/integration/fixtures/https/rootcas/https.toml +++ b/integration/fixtures/https/rootcas/https.toml @@ -30,8 +30,8 @@ fblo6RBxUQ== [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/https/rootcas/https_with_file.toml b/integration/fixtures/https/rootcas/https_with_file.toml index a37b8544c..21e957df8 100644 --- a/integration/fixtures/https/rootcas/https_with_file.toml +++ b/integration/fixtures/https/rootcas/https_with_file.toml @@ -15,8 +15,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/log_rotation_config.toml b/integration/fixtures/log_rotation_config.toml deleted file mode 100644 index e96a0c7c0..000000000 --- a/integration/fixtures/log_rotation_config.toml +++ /dev/null @@ -1,36 +0,0 @@ -[global] - checkNewVersion = false - sendAnonymousUsage = false - -[log] - filePath = "traefik.log" - level = "ERROR" - -[accessLog] - filePath = "access.log" - -[entryPoints] - [entryPoints.web] - address = ":8000" - [entryPoints.api] - address = ":7888" - -[api] - entryPoint = "api" - -[providers] - [providers.file] - -## dynamic configuration ## - -[http.routers] - [http.routers.router1] - Service = "service1" - rule = "Path(`/test1`)" - -[http.services] - [http.services.service1] - [http.services.service1.loadBalancer] - - [[http.services.service1.loadBalancer.servers]] - url = "http://127.0.0.1:8081" diff --git a/integration/fixtures/multiple_provider.toml b/integration/fixtures/multiple_provider.toml index 6703950f0..0ac809de2 100644 --- a/integration/fixtures/multiple_provider.toml +++ b/integration/fixtures/multiple_provider.toml @@ -17,6 +17,7 @@ exposedByDefault = false [providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/multiprovider.toml b/integration/fixtures/multiprovider.toml index 4a2621455..23c0161ae 100644 --- a/integration/fixtures/multiprovider.toml +++ b/integration/fixtures/multiprovider.toml @@ -15,6 +15,7 @@ [providers.rest] [providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/proxy-protocol/with.toml b/integration/fixtures/proxy-protocol/with.toml index d7a630a1f..f16361986 100644 --- a/integration/fixtures/proxy-protocol/with.toml +++ b/integration/fixtures/proxy-protocol/with.toml @@ -13,8 +13,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/proxy-protocol/without.toml b/integration/fixtures/proxy-protocol/without.toml index edd4597b2..ef95ca5c7 100644 --- a/integration/fixtures/proxy-protocol/without.toml +++ b/integration/fixtures/proxy-protocol/without.toml @@ -13,8 +13,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/ratelimit/simple.toml b/integration/fixtures/ratelimit/simple.toml index ce04a31f1..9a1a18c24 100644 --- a/integration/fixtures/ratelimit/simple.toml +++ b/integration/fixtures/ratelimit/simple.toml @@ -15,8 +15,8 @@ [entryPoints.api] address = ":8080" -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/reqacceptgrace.toml b/integration/fixtures/reqacceptgrace.toml index ab5a9cedd..945a7d168 100644 --- a/integration/fixtures/reqacceptgrace.toml +++ b/integration/fixtures/reqacceptgrace.toml @@ -19,8 +19,8 @@ [ping] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## @@ -32,5 +32,5 @@ [http.services] [http.services.service.loadBalancer] [[http.services.service.loadBalancer.servers]] - url = "{{.Server}}" + url = "{{ .Server }}" diff --git a/integration/fixtures/retry/simple.toml b/integration/fixtures/retry/simple.toml index 30cb722d0..fea2a4a60 100644 --- a/integration/fixtures/retry/simple.toml +++ b/integration/fixtures/retry/simple.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/simple_auth.toml b/integration/fixtures/simple_auth.toml index f17b5c88e..51476e428 100644 --- a/integration/fixtures/simple_auth.toml +++ b/integration/fixtures/simple_auth.toml @@ -18,6 +18,9 @@ [ping] [providers.file] + filename = "{{ .SelfFilename }}" + +## dynamic configuration ## [http.middlewares] [http.middlewares.authentication.basicAuth] diff --git a/integration/fixtures/simple_stats.toml b/integration/fixtures/simple_stats.toml index bb9da6f3f..4283299db 100644 --- a/integration/fixtures/simple_stats.toml +++ b/integration/fixtures/simple_stats.toml @@ -12,6 +12,7 @@ [api] [providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/tcp/catch-all-no-tls-with-https.toml b/integration/fixtures/tcp/catch-all-no-tls-with-https.toml index 5f4c79900..cc65bda34 100644 --- a/integration/fixtures/tcp/catch-all-no-tls-with-https.toml +++ b/integration/fixtures/tcp/catch-all-no-tls-with-https.toml @@ -12,6 +12,7 @@ [api] [providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/tcp/catch-all-no-tls.toml b/integration/fixtures/tcp/catch-all-no-tls.toml index efca7631d..0132822ee 100644 --- a/integration/fixtures/tcp/catch-all-no-tls.toml +++ b/integration/fixtures/tcp/catch-all-no-tls.toml @@ -12,6 +12,7 @@ [api] [providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/tcp/mixed.toml b/integration/fixtures/tcp/mixed.toml index 9bca88eaf..e673276ad 100644 --- a/integration/fixtures/tcp/mixed.toml +++ b/integration/fixtures/tcp/mixed.toml @@ -12,6 +12,7 @@ [api] [providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/tcp/multi-tls-options.toml b/integration/fixtures/tcp/multi-tls-options.toml index 884924365..9aca38006 100644 --- a/integration/fixtures/tcp/multi-tls-options.toml +++ b/integration/fixtures/tcp/multi-tls-options.toml @@ -12,6 +12,7 @@ [api] [providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/tcp/non-tls-fallback.toml b/integration/fixtures/tcp/non-tls-fallback.toml index 173086e1b..45ff3caa7 100644 --- a/integration/fixtures/tcp/non-tls-fallback.toml +++ b/integration/fixtures/tcp/non-tls-fallback.toml @@ -12,6 +12,9 @@ [api] [providers.file] + filename = "{{ .SelfFilename }}" + +## dynamic configuration ## [tcp] [tcp.routers] diff --git a/integration/fixtures/tcp/non-tls.toml b/integration/fixtures/tcp/non-tls.toml index c7ba8297f..6c7acf6df 100644 --- a/integration/fixtures/tcp/non-tls.toml +++ b/integration/fixtures/tcp/non-tls.toml @@ -12,6 +12,7 @@ [api] [providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/timeout/forwarding_timeouts.toml b/integration/fixtures/timeout/forwarding_timeouts.toml index 5d123d18d..9df89a175 100644 --- a/integration/fixtures/timeout/forwarding_timeouts.toml +++ b/integration/fixtures/timeout/forwarding_timeouts.toml @@ -18,8 +18,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/timeout/keepalive.toml b/integration/fixtures/timeout/keepalive.toml index d79e04786..4a8924362 100644 --- a/integration/fixtures/timeout/keepalive.toml +++ b/integration/fixtures/timeout/keepalive.toml @@ -14,8 +14,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/tlsclientheaders/simple.toml b/integration/fixtures/tlsclientheaders/simple.toml index 9469bb91f..5e6af461d 100644 --- a/integration/fixtures/tlsclientheaders/simple.toml +++ b/integration/fixtures/tlsclientheaders/simple.toml @@ -19,6 +19,7 @@ watch = true [providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/tracing/simple-jaeger.toml b/integration/fixtures/tracing/simple-jaeger.toml index 53435ad88..3bc8a08d3 100644 --- a/integration/fixtures/tracing/simple-jaeger.toml +++ b/integration/fixtures/tracing/simple-jaeger.toml @@ -19,8 +19,8 @@ samplingServerURL = "http://{{.IP}}:5778/sampling" localAgentHostPort = "{{.IP}}:6831" -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/tracing/simple-zipkin.toml b/integration/fixtures/tracing/simple-zipkin.toml index b1f14bf37..46f8ff697 100644 --- a/integration/fixtures/tracing/simple-zipkin.toml +++ b/integration/fixtures/tracing/simple-zipkin.toml @@ -17,8 +17,8 @@ httpEndpoint = "http://{{.IP}}:9411/api/v1/spans" debug = true -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/websocket/config.toml b/integration/fixtures/websocket/config.toml index 066155d9b..3e357c057 100644 --- a/integration/fixtures/websocket/config.toml +++ b/integration/fixtures/websocket/config.toml @@ -11,8 +11,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/fixtures/websocket/config_https.toml b/integration/fixtures/websocket/config_https.toml index f020fa71d..c878e1ef3 100644 --- a/integration/fixtures/websocket/config_https.toml +++ b/integration/fixtures/websocket/config_https.toml @@ -14,8 +14,8 @@ [api] -[providers] - [providers.file] +[providers.file] + filename = "{{ .SelfFilename }}" ## dynamic configuration ## diff --git a/integration/headers_test.go b/integration/headers_test.go index dd60a5876..aa4fd2653 100644 --- a/integration/headers_test.go +++ b/integration/headers_test.go @@ -2,6 +2,7 @@ package integration import ( "net/http" + "os" "time" "github.com/containous/traefik/integration/try" @@ -25,7 +26,9 @@ func (s *HeadersSuite) TestSimpleConfiguration(c *check.C) { } func (s *HeadersSuite) TestCorsResponses(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/headers/cors.toml")) + file := s.adaptFile(c, "fixtures/headers/cors.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() diff --git a/integration/https_test.go b/integration/https_test.go index d589f216d..07c74f229 100644 --- a/integration/https_test.go +++ b/integration/https_test.go @@ -25,7 +25,9 @@ type HTTPSSuite struct{ BaseSuite } // "snitest.com", which happens to match the CN of 'snitest.com.crt'. The test // verifies that traefik presents the correct certificate. func (s *HTTPSSuite) TestWithSNIConfigHandshake(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/https_sni.toml")) + file := s.adaptFile(c, "fixtures/https/https_sni.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) @@ -59,7 +61,9 @@ func (s *HTTPSSuite) TestWithSNIConfigHandshake(c *check.C) { // SNI hostnames of "snitest.org" and "snitest.com". The test verifies // that traefik routes the requests to the expected backends. func (s *HTTPSSuite) TestWithSNIConfigRoute(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/https_sni.toml")) + file := s.adaptFile(c, "fixtures/https/https_sni.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) @@ -113,7 +117,9 @@ func (s *HTTPSSuite) TestWithSNIConfigRoute(c *check.C) { // TestWithTLSOptions verifies that traefik routes the requests with the associated tls options. func (s *HTTPSSuite) TestWithTLSOptions(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/https_tls_options.toml")) + file := s.adaptFile(c, "fixtures/https/https_tls_options.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) @@ -197,7 +203,9 @@ func (s *HTTPSSuite) TestWithTLSOptions(c *check.C) { // TestWithConflictingTLSOptions checks that routers with same SNI but different TLS options get fallbacked to the default TLS options. func (s *HTTPSSuite) TestWithConflictingTLSOptions(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/https_tls_options.toml")) + file := s.adaptFile(c, "fixtures/https/https_tls_options.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) @@ -265,7 +273,9 @@ func (s *HTTPSSuite) TestWithConflictingTLSOptions(c *check.C) { // "snitest.org", which does not match the CN of 'snitest.com.crt'. The test // verifies that traefik closes the connection. func (s *HTTPSSuite) TestWithSNIStrictNotMatchedRequest(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/https_sni_strict.toml")) + file := s.adaptFile(c, "fixtures/https/https_sni_strict.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) @@ -289,7 +299,9 @@ func (s *HTTPSSuite) TestWithSNIStrictNotMatchedRequest(c *check.C) { // "snitest.org", which does not match the CN of 'snitest.com.crt'. The test // verifies that traefik returns the default certificate. func (s *HTTPSSuite) TestWithDefaultCertificate(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/https_sni_default_cert.toml")) + file := s.adaptFile(c, "fixtures/https/https_sni_default_cert.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) @@ -323,7 +335,9 @@ func (s *HTTPSSuite) TestWithDefaultCertificate(c *check.C) { // which does not match the CN of 'snitest.com.crt'. The test // verifies that traefik returns the default certificate. func (s *HTTPSSuite) TestWithDefaultCertificateNoSNI(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/https_sni_default_cert.toml")) + file := s.adaptFile(c, "fixtures/https/https_sni_default_cert.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) @@ -357,7 +371,9 @@ func (s *HTTPSSuite) TestWithDefaultCertificateNoSNI(c *check.C) { // 'wildcard.snitest.com.crt', and `www.snitest.com.crt`. The test // verifies that traefik returns the non-wildcard certificate. func (s *HTTPSSuite) TestWithOverlappingStaticCertificate(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/https_sni_default_cert.toml")) + file := s.adaptFile(c, "fixtures/https/https_sni_default_cert.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) @@ -392,7 +408,9 @@ func (s *HTTPSSuite) TestWithOverlappingStaticCertificate(c *check.C) { // 'wildcard.snitest.com.crt', and `www.snitest.com.crt`. The test // verifies that traefik returns the non-wildcard certificate. func (s *HTTPSSuite) TestWithOverlappingDynamicCertificate(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/dynamic_https_sni_default_cert.toml")) + file := s.adaptFile(c, "fixtures/https/dynamic_https_sni_default_cert.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) @@ -425,7 +443,9 @@ func (s *HTTPSSuite) TestWithOverlappingDynamicCertificate(c *check.C) { // TestWithClientCertificateAuthentication // The client can send a certificate signed by a CA trusted by the server but it's optional func (s *HTTPSSuite) TestWithClientCertificateAuthentication(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/clientca/https_1ca1config.toml")) + file := s.adaptFile(c, "fixtures/https/clientca/https_1ca1config.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) @@ -481,7 +501,9 @@ func (s *HTTPSSuite) TestWithClientCertificateAuthentication(c *check.C) { // TestWithClientCertificateAuthentication // Use two CA:s and test that clients with client signed by either of them can connect func (s *HTTPSSuite) TestWithClientCertificateAuthenticationMultipleCAs(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/clientca/https_2ca1config.toml")) + file := s.adaptFile(c, "fixtures/https/clientca/https_2ca1config.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) @@ -542,7 +564,9 @@ func (s *HTTPSSuite) TestWithClientCertificateAuthenticationMultipleCAs(c *check // TestWithClientCertificateAuthentication // Use two CA:s in two different files and test that clients with client signed by either of them can connect func (s *HTTPSSuite) TestWithClientCertificateAuthenticationMultipleCAsMultipleFiles(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/clientca/https_2ca2config.toml")) + file := s.adaptFile(c, "fixtures/https/clientca/https_2ca2config.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) @@ -777,7 +801,7 @@ func (s *HTTPSSuite) TestWithSNIDynamicConfigRouteWithChange(c *check.C) { c.Assert(err, checker.IsNil) // Change certificates configuration file content - modifyCertificateConfFileContent(c, tr1.TLSClientConfig.ServerName, dynamicConfFileName, "https") + modifyCertificateConfFileContent(c, tr1.TLSClientConfig.ServerName, dynamicConfFileName) req, err := http.NewRequest(http.MethodGet, "https://127.0.0.1:4443/", nil) c.Assert(err, checker.IsNil) @@ -846,14 +870,14 @@ func (s *HTTPSSuite) TestWithSNIDynamicConfigRouteWithTlsConfigurationDeletion(c c.Assert(err, checker.IsNil) // Change certificates configuration file content - modifyCertificateConfFileContent(c, "", dynamicConfFileName, "https02") + modifyCertificateConfFileContent(c, "", dynamicConfFileName) err = try.RequestWithTransport(req, 30*time.Second, tr2, try.HasCn("TRAEFIK DEFAULT CERT"), try.StatusCodeIs(http.StatusNotFound)) c.Assert(err, checker.IsNil) } // modifyCertificateConfFileContent replaces the content of a HTTPS configuration file. -func modifyCertificateConfFileContent(c *check.C, certFileName, confFileName, entryPoint string) { +func modifyCertificateConfFileContent(c *check.C, certFileName, confFileName string) { file, err := os.OpenFile("./"+confFileName, os.O_WRONLY, os.ModeExclusive) c.Assert(err, checker.IsNil) defer func() { @@ -884,8 +908,10 @@ func modifyCertificateConfFileContent(c *check.C, certFileName, confFileName, en } } -func (s *HTTPSSuite) TestEntrypointHttpsRedirectAndPathModification(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/https_redirect.toml")) +func (s *HTTPSSuite) TestEntryPointHttpsRedirectAndPathModification(c *check.C) { + file := s.adaptFile(c, "fixtures/https/https_redirect.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) @@ -986,7 +1012,9 @@ func (s *HTTPSSuite) TestEntrypointHttpsRedirectAndPathModification(c *check.C) // "bar.www.snitest.com", which matches the DNS SAN of '*.WWW.SNITEST.COM'. The test // verifies that traefik presents the correct certificate. func (s *HTTPSSuite) TestWithSNIDynamicCaseInsensitive(c *check.C) { - cmd, display := s.traefikCmd(withConfigFile("fixtures/https/https_sni_case_insensitive_dynamic.toml")) + file := s.adaptFile(c, "fixtures/https/https_sni_case_insensitive_dynamic.toml", struct{}{}) + defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() c.Assert(err, checker.IsNil) diff --git a/integration/integration_test.go b/integration/integration_test.go index 150638c2b..3d0779f82 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -15,6 +15,7 @@ import ( "text/template" "github.com/containous/traefik/pkg/log" + "github.com/fatih/structs" "github.com/go-check/check" compose "github.com/libkermit/compose/check" checker "github.com/vdemeester/shakers" @@ -150,7 +151,10 @@ func (s *BaseSuite) adaptFile(c *check.C, path string, tempObjects interface{}) c.Assert(err, checker.IsNil) defer tmpFile.Close() - err = tmpl.ExecuteTemplate(tmpFile, prefix, tempObjects) + model := structs.Map(tempObjects) + model["SelfFilename"] = tmpFile.Name() + + err = tmpl.ExecuteTemplate(tmpFile, prefix, model) c.Assert(err, checker.IsNil) err = tmpFile.Sync() diff --git a/integration/simple_test.go b/integration/simple_test.go index 2b09080bd..ef4baa451 100644 --- a/integration/simple_test.go +++ b/integration/simple_test.go @@ -98,6 +98,7 @@ func (s *SimpleSuite) TestRequestAcceptGraceTimeout(c *check.C) { Server string }{whoami}) defer os.Remove(file) + cmd, display := s.traefikCmd(withConfigFile(file)) defer display(c) err := cmd.Start() @@ -223,7 +224,9 @@ func (s *SimpleSuite) TestNoAuthOnPing(c *check.C) { s.createComposeProject(c, "base") s.composeProject.Start(c) - cmd, output := s.traefikCmd(withConfigFile("./fixtures/simple_auth.toml")) + file := s.adaptFile(c, "./fixtures/simple_auth.toml", struct{}{}) + defer os.Remove(file) + cmd, output := s.traefikCmd(withConfigFile(file)) defer output(c) err := cmd.Start() @@ -237,7 +240,7 @@ func (s *SimpleSuite) TestNoAuthOnPing(c *check.C) { c.Assert(err, checker.IsNil) } -func (s *SimpleSuite) TestDefaultEntrypointHTTP(c *check.C) { +func (s *SimpleSuite) TestDefaultEntryPointHTTP(c *check.C) { s.createComposeProject(c, "base") s.composeProject.Start(c) @@ -255,7 +258,7 @@ func (s *SimpleSuite) TestDefaultEntrypointHTTP(c *check.C) { c.Assert(err, checker.IsNil) } -func (s *SimpleSuite) TestWithUnexistingEntrypoint(c *check.C) { +func (s *SimpleSuite) TestWithNonExistingEntryPoint(c *check.C) { s.createComposeProject(c, "base") s.composeProject.Start(c) @@ -273,7 +276,7 @@ func (s *SimpleSuite) TestWithUnexistingEntrypoint(c *check.C) { c.Assert(err, checker.IsNil) } -func (s *SimpleSuite) TestMetricsPrometheusDefaultEntrypoint(c *check.C) { +func (s *SimpleSuite) TestMetricsPrometheusDefaultEntryPoint(c *check.C) { s.createComposeProject(c, "base") s.composeProject.Start(c) @@ -419,7 +422,7 @@ func (s *SimpleSuite) TestXForwardedHeaders(c *check.C) { c.Assert(err, checker.IsNil) } -func (s *SimpleSuite) TestMultiprovider(c *check.C) { +func (s *SimpleSuite) TestMultiProvider(c *check.C) { s.createComposeProject(c, "base") s.composeProject.Start(c) @@ -453,10 +456,10 @@ func (s *SimpleSuite) TestMultiprovider(c *check.C) { }, } - json, err := json.Marshal(config) + jsonContent, err := json.Marshal(config) c.Assert(err, checker.IsNil) - request, err := http.NewRequest(http.MethodPut, "http://127.0.0.1:8080/api/providers/rest", bytes.NewReader(json)) + request, err := http.NewRequest(http.MethodPut, "http://127.0.0.1:8080/api/providers/rest", bytes.NewReader(jsonContent)) c.Assert(err, checker.IsNil) response, err := http.DefaultClient.Do(request) diff --git a/pkg/anonymize/anonymize_config_test.go b/pkg/anonymize/anonymize_config_test.go index d71afc806..14b61dbd7 100644 --- a/pkg/anonymize/anonymize_config_test.go +++ b/pkg/anonymize/anonymize_config_test.go @@ -149,7 +149,6 @@ func TestDo_globalConfiguration(t *testing.T) { Watch: true, Filename: "file Filename", DebugLogGeneratedTemplate: true, - TraefikFile: "", } config.Providers.Docker = &docker.Provider{ diff --git a/pkg/cli/loader.go b/pkg/cli/loader.go index 90065910f..84f08d68d 100644 --- a/pkg/cli/loader.go +++ b/pkg/cli/loader.go @@ -5,17 +5,3 @@ type ResourceLoader interface { // Load populates cmd.Configuration, optionally using args to do so. Load(args []string, cmd *Command) (bool, error) } - -type filenameGetter interface { - GetFilename() string -} - -// GetConfigFile returns the configuration file corresponding to the first configuration file loader found in ResourceLoader, if any. -func GetConfigFile(loaders []ResourceLoader) string { - for _, loader := range loaders { - if v, ok := loader.(filenameGetter); ok { - return v.GetFilename() - } - } - return "" -} diff --git a/pkg/config/dynamic/fixtures/sample.toml b/pkg/config/dynamic/fixtures/sample.toml index 0a288c010..89e9672f7 100644 --- a/pkg/config/dynamic/fixtures/sample.toml +++ b/pkg/config/dynamic/fixtures/sample.toml @@ -52,7 +52,6 @@ watch = true filename = "foobar" debugLogGeneratedTemplate = true - traefikFile = "foobar" [providers.marathon] constraints = "foobar" trace = true diff --git a/pkg/config/file/file_node_test.go b/pkg/config/file/file_node_test.go index 6ed2ba1c0..086af94c1 100644 --- a/pkg/config/file/file_node_test.go +++ b/pkg/config/file/file_node_test.go @@ -192,7 +192,6 @@ func Test_decodeFileToNode_Toml(t *testing.T) { {Name: "debugLogGeneratedTemplate", Value: "true"}, {Name: "directory", Value: "foobar"}, {Name: "filename", Value: "foobar"}, - {Name: "traefikFile", Value: "foobar"}, {Name: "watch", Value: "true"}}}, {Name: "kubernetesCRD", Children: []*parser.Node{ @@ -435,7 +434,6 @@ func Test_decodeFileToNode_Yaml(t *testing.T) { {Name: "debugLogGeneratedTemplate", Value: "true"}, {Name: "directory", Value: "foobar"}, {Name: "filename", Value: "foobar"}, - {Name: "traefikFile", Value: "foobar"}, {Name: "watch", Value: "true"}}}, {Name: "kubernetesCRD", Children: []*parser.Node{ diff --git a/pkg/config/file/fixtures/sample.toml b/pkg/config/file/fixtures/sample.toml index 4459c506a..e964e12ca 100644 --- a/pkg/config/file/fixtures/sample.toml +++ b/pkg/config/file/fixtures/sample.toml @@ -52,7 +52,6 @@ watch = true filename = "foobar" debugLogGeneratedTemplate = true - traefikFile = "foobar" [providers.marathon] constraints = "foobar" trace = true diff --git a/pkg/config/file/fixtures/sample.yml b/pkg/config/file/fixtures/sample.yml index f66fb2c93..40a8c55da 100644 --- a/pkg/config/file/fixtures/sample.yml +++ b/pkg/config/file/fixtures/sample.yml @@ -55,7 +55,6 @@ providers: watch: true filename: foobar debugLogGeneratedTemplate: true - traefikFile: foobar marathon: constraints: foobar trace: true diff --git a/pkg/config/static/static_config.go b/pkg/config/static/static_config.go index b2290f8d6..e284e1337 100644 --- a/pkg/config/static/static_config.go +++ b/pkg/config/static/static_config.go @@ -149,7 +149,7 @@ func (t *Tracing) SetDefaults() { type Providers struct { ProvidersThrottleDuration types.Duration `description:"Backends throttle duration: minimum duration between 2 events from providers before applying a new configuration. It avoids unnecessary reloads if multiples events are sent in a short amount of time." json:"providersThrottleDuration,omitempty" toml:"providersThrottleDuration,omitempty" yaml:"providersThrottleDuration,omitempty" export:"true"` Docker *docker.Provider `description:"Enable Docker backend with default settings." json:"docker,omitempty" toml:"docker,omitempty" yaml:"docker,omitempty" export:"true" label:"allowEmpty"` - File *file.Provider `description:"Enable File backend with default settings." json:"file,omitempty" toml:"file,omitempty" yaml:"file,omitempty" export:"true" label:"allowEmpty"` + File *file.Provider `description:"Enable File backend with default settings." json:"file,omitempty" toml:"file,omitempty" yaml:"file,omitempty" export:"true"` Marathon *marathon.Provider `description:"Enable Marathon backend with default settings." json:"marathon,omitempty" toml:"marathon,omitempty" yaml:"marathon,omitempty" export:"true" label:"allowEmpty"` KubernetesIngress *ingress.Provider `description:"Enable Kubernetes backend with default settings." json:"kubernetesIngress,omitempty" toml:"kubernetesIngress,omitempty" yaml:"kubernetesIngress,omitempty" export:"true" label:"allowEmpty"` KubernetesCRD *crd.Provider `description:"Enable Kubernetes backend with default settings." json:"kubernetesCRD,omitempty" toml:"kubernetesCRD,omitempty" yaml:"kubernetesCRD,omitempty" export:"true" label:"allowEmpty"` @@ -159,7 +159,7 @@ type Providers struct { // SetEffectiveConfiguration adds missing configuration parameters derived from existing ones. // It also takes care of maintaining backwards compatibility. -func (c *Configuration) SetEffectiveConfiguration(configFile string) { +func (c *Configuration) SetEffectiveConfiguration() { if len(c.EntryPoints) == 0 { ep := &EntryPoint{Address: ":80"} ep.SetDefaults() @@ -185,10 +185,6 @@ func (c *Configuration) SetEffectiveConfiguration(configFile string) { } } - if c.Providers.File != nil { - c.Providers.File.TraefikFile = configFile - } - if c.Providers.Rancher != nil { if c.Providers.Rancher.RefreshSeconds <= 0 { c.Providers.Rancher.RefreshSeconds = 15 diff --git a/pkg/provider/file/file.go b/pkg/provider/file/file.go index c89bc0be0..b70475c70 100644 --- a/pkg/provider/file/file.go +++ b/pkg/provider/file/file.go @@ -32,7 +32,6 @@ type Provider struct { Watch bool `description:"Watch provider." json:"watch,omitempty" toml:"watch,omitempty" yaml:"watch,omitempty" export:"true"` Filename string `description:"Override default configuration template. For advanced users :)" json:"filename,omitempty" toml:"filename,omitempty" yaml:"filename,omitempty" export:"true"` DebugLogGeneratedTemplate bool `description:"Enable debug logging of generated configuration template." json:"debugLogGeneratedTemplate,omitempty" toml:"debugLogGeneratedTemplate,omitempty" yaml:"debugLogGeneratedTemplate,omitempty" export:"true"` - TraefikFile string `description:"-" json:"traefikFile,omitempty" toml:"-" yaml:"-"` } // SetDefaults sets the default values. @@ -64,7 +63,7 @@ func (p *Provider) Provide(configurationChan chan<- dynamic.Message, pool *safe. case len(p.Filename) > 0: watchItem = filepath.Dir(p.Filename) default: - watchItem = filepath.Dir(p.TraefikFile) + return errors.New("error using file configuration provider, neither filename or directory defined") } if err := p.addWatcher(pool, watchItem, configurationChan, p.watcherCallback); err != nil { @@ -89,11 +88,7 @@ func (p *Provider) BuildConfiguration() (*dynamic.Configuration, error) { return p.loadFileConfig(p.Filename, true) } - if len(p.TraefikFile) > 0 { - return p.loadFileConfig(p.TraefikFile, false) - } - - return nil, errors.New("error using file configuration backend, no filename defined") + return nil, errors.New("error using file configuration provider, neither filename or directory defined") } func (p *Provider) addWatcher(pool *safe.Pool, directory string, configurationChan chan<- dynamic.Message, callback func(chan<- dynamic.Message, fsnotify.Event)) error { @@ -116,15 +111,8 @@ func (p *Provider) addWatcher(pool *safe.Pool, directory string, configurationCh return case evt := <-watcher.Events: if p.Directory == "" { - var filename string - if len(p.Filename) > 0 { - filename = p.Filename - } else { - filename = p.TraefikFile - } - _, evtFileName := filepath.Split(evt.Name) - _, confFileName := filepath.Split(filename) + _, confFileName := filepath.Split(p.Filename) if evtFileName == confFileName { callback(configurationChan, evt) } @@ -140,11 +128,9 @@ func (p *Provider) addWatcher(pool *safe.Pool, directory string, configurationCh } func (p *Provider) watcherCallback(configurationChan chan<- dynamic.Message, event fsnotify.Event) { - watchItem := p.TraefikFile + watchItem := p.Filename if len(p.Directory) > 0 { watchItem = p.Directory - } else if len(p.Filename) > 0 { - watchItem = p.Filename } logger := log.WithoutContext().WithField(log.ProviderName, providerName) diff --git a/pkg/provider/file/file_test.go b/pkg/provider/file/file_test.go index 3907b6e9e..8307d8a10 100644 --- a/pkg/provider/file/file_test.go +++ b/pkg/provider/file/file_test.go @@ -20,7 +20,6 @@ type ProvideTestCase struct { desc string directoryPaths []string filePath string - traefikFilePath string expectedNumRouter int expectedNumService int expectedNumTLSConf int @@ -131,11 +130,6 @@ func TestProvideWithWatch(t *testing.T) { require.NoError(t, err) } - if len(test.traefikFilePath) > 0 { - err := copyFile(test.traefikFilePath, provider.TraefikFile) - require.NoError(t, err) - } - if len(test.directoryPaths) > 0 { for i, filePath := range test.directoryPaths { err := copyFile(filePath, filepath.Join(provider.Directory, strconv.Itoa(i)+filepath.Ext(filePath))) @@ -181,36 +175,6 @@ func getTestCases() []ProvideTestCase { expectedNumService: 6, expectedNumTLSConf: 5, }, - { - desc: "simple file and a traefik file", - filePath: "./fixtures/toml/simple_file_02.toml", - traefikFilePath: "./fixtures/toml/simple_traefik_file_01.toml", - expectedNumRouter: 4, - expectedNumService: 8, - expectedNumTLSConf: 4, - }, - { - desc: "simple file and a traefik file yaml", - filePath: "./fixtures/yaml/simple_file_02.yml", - traefikFilePath: "./fixtures/yaml/simple_traefik_file_01.yml", - expectedNumRouter: 4, - expectedNumService: 8, - expectedNumTLSConf: 4, - }, - { - desc: "simple traefik file", - traefikFilePath: "./fixtures/toml/simple_traefik_file_02.toml", - expectedNumRouter: 2, - expectedNumService: 3, - expectedNumTLSConf: 4, - }, - { - desc: "simple traefik file yaml", - traefikFilePath: "./fixtures/yaml/simple_traefik_file_02.yml", - expectedNumRouter: 2, - expectedNumService: 3, - expectedNumTLSConf: 4, - }, { desc: "template file", filePath: "./fixtures/toml/template_file.toml", @@ -221,13 +185,6 @@ func getTestCases() []ProvideTestCase { filePath: "./fixtures/yaml/template_file.yml", expectedNumRouter: 20, }, - { - desc: "simple traefik file with templating", - traefikFilePath: "./fixtures/toml/simple_traefik_file_with_templating.toml", - expectedNumRouter: 2, - expectedNumService: 3, - expectedNumTLSConf: 4, - }, { desc: "simple directory", directoryPaths: []string{ @@ -304,21 +261,6 @@ func createProvider(t *testing.T, test ProvideTestCase, watch bool) (*Provider, provider.Filename = file.Name() } - if len(test.traefikFilePath) > 0 { - var file *os.File - if watch { - var err error - file, err = ioutil.TempFile(tempDir, "temp*"+filepath.Ext(test.traefikFilePath)) - require.NoError(t, err) - } else { - var err error - file, err = createTempFile(test.traefikFilePath, tempDir) - require.NoError(t, err) - } - - provider.TraefikFile = file.Name() - } - return provider, func() { os.RemoveAll(tempDir) } diff --git a/pkg/provider/file/fixtures/toml/simple_traefik_file_01.toml b/pkg/provider/file/fixtures/toml/simple_traefik_file_01.toml deleted file mode 100644 index db2d68bfc..000000000 --- a/pkg/provider/file/fixtures/toml/simple_traefik_file_01.toml +++ /dev/null @@ -1,2 +0,0 @@ -[log] - level = "DEBUG" diff --git a/pkg/provider/file/fixtures/toml/simple_traefik_file_02.toml b/pkg/provider/file/fixtures/toml/simple_traefik_file_02.toml deleted file mode 100644 index 023ca4109..000000000 --- a/pkg/provider/file/fixtures/toml/simple_traefik_file_02.toml +++ /dev/null @@ -1,44 +0,0 @@ -[providers.file] - -## dynamic configuration ## - -[http.routers] - - [http.routers."router1"] - service = "application-1" - - [http.routers."router2"] - service = "application-2" - - -[http.services] - - [http.services.application-1.loadBalancer] - [[http.services.application-1.loadBalancer.servers]] - url = "http://172.17.0.1:80" - - [http.services.application-2.loadBalancer] - [[http.services.application-2.loadBalancer.servers]] - url = "http://172.17.0.2:80" - - [http.services.application-3.loadBalancer] - [[http.services.application-3.loadBalancer.servers]] - url = "http://172.17.0.3:80" - -[tls] - -[[tls.certificates]] - certFile = "integration/fixtures/https/snitest1.com.cert" - keyFile = "integration/fixtures/https/snitest1.com.key" - -[[tls.certificates]] - certFile = "integration/fixtures/https/snitest2.com.cert" - keyFile = "integration/fixtures/https/snitest2.com.key" - -[[tls.certificates]] - certFile = "integration/fixtures/https/snitest3.com.cert" - keyFile = "integration/fixtures/https/snitest3.com.key" - -[[tls.certificates]] - certFile = "integration/fixtures/https/snitest4.com.cert" - keyFile = "integration/fixtures/https/snitest4.com.key" diff --git a/pkg/provider/file/fixtures/toml/simple_traefik_file_with_templating.toml b/pkg/provider/file/fixtures/toml/simple_traefik_file_with_templating.toml deleted file mode 100644 index c99dc5610..000000000 --- a/pkg/provider/file/fixtures/toml/simple_traefik_file_with_templating.toml +++ /dev/null @@ -1,45 +0,0 @@ -temp="{{ getTag \"test\" }}" - -[providers.file] - -## dynamic configuration ## - -[http.routers] - -[http.routers."router1"] - service = "application-1" - -[http.routers."router2"] - service = "application-2" - -[http.services] - - [http.services.application-1.loadBalancer] - [[http.services.application-1.loadBalancer.servers]] - url = "http://172.17.0.1:80" - - [http.services.application-2.loadBalancer] - [[http.services.application-2.loadBalancer.servers]] - url = "http://172.17.0.2:80" - - [http.services.application-3.loadBalancer] - [[http.services.application-3.loadBalancer.servers]] - url = "http://172.17.0.3:80" - -[tls] - -[[tls.certificates]] - certFile = "integration/fixtures/https/snitest1.com.cert" - keyFile = "integration/fixtures/https/snitest1.com.key" - -[[tls.certificates]] - certFile = "integration/fixtures/https/snitest2.com.cert" - keyFile = "integration/fixtures/https/snitest2.com.key" - -[[tls.certificates]] - certFile = "integration/fixtures/https/snitest3.com.cert" - keyFile = "integration/fixtures/https/snitest3.com.key" - -[[tls.certificates]] - certFile = "integration/fixtures/https/snitest4.com.cert" - keyFile = "integration/fixtures/https/snitest4.com.key" diff --git a/pkg/provider/file/fixtures/yaml/simple_traefik_file_01.yml b/pkg/provider/file/fixtures/yaml/simple_traefik_file_01.yml deleted file mode 100644 index b0e9cab54..000000000 --- a/pkg/provider/file/fixtures/yaml/simple_traefik_file_01.yml +++ /dev/null @@ -1,2 +0,0 @@ -log: - level: DEBUG diff --git a/pkg/provider/file/fixtures/yaml/simple_traefik_file_02.yml b/pkg/provider/file/fixtures/yaml/simple_traefik_file_02.yml deleted file mode 100644 index 1d9979eb9..000000000 --- a/pkg/provider/file/fixtures/yaml/simple_traefik_file_02.yml +++ /dev/null @@ -1,32 +0,0 @@ -providers: - file: {} -http: - routers: - router1: - service: application-1 - router2: - service: application-2 - services: - application-1: - loadBalancer: - servers: - - url: 'http://172.17.0.1:80' - application-2: - loadBalancer: - servers: - - url: 'http://172.17.0.2:80' - application-3: - loadBalancer: - servers: - - url: 'http://172.17.0.3:80' - -tls: - certificates: - - certFile: integration/fixtures/https/snitest1.com.cert - keyFile: integration/fixtures/https/snitest1.com.key - - certFile: integration/fixtures/https/snitest2.com.cert - keyFile: integration/fixtures/https/snitest2.com.key - - certFile: integration/fixtures/https/snitest3.com.cert - keyFile: integration/fixtures/https/snitest3.com.key - - certFile: integration/fixtures/https/snitest4.com.cert - keyFile: integration/fixtures/https/snitest4.com.key