From 720bef97e6fcd885dbe00b5cbcc8232afa319737 Mon Sep 17 00:00:00 2001 From: Neil McAllister Date: Mon, 13 Jul 2020 11:44:38 +0200 Subject: [PATCH] doc: add pilot and plugins documentation. --- docs/content/https/acme.md | 2 +- docs/content/plugins/overview.md | 35 +++++ docs/content/plugins/using-plugins.md | 122 ++++++++++++++++++ .../dynamic-configuration/docker-labels.yml | 43 +++--- .../reference/dynamic-configuration/file.toml | 38 +++--- .../reference/dynamic-configuration/file.yaml | 18 ++- .../reference/dynamic-configuration/kv-ref.md | 47 +++---- .../marathon-labels.json | 43 +++--- .../reference/static-configuration/cli-ref.md | 3 - .../reference/static-configuration/env-ref.md | 3 - .../reference/static-configuration/file.toml | 14 ++ .../reference/static-configuration/file.yaml | 13 ++ docs/mkdocs.yml | 3 + docs/scripts/verify.sh | 2 +- internal/gendoc.go | 5 + 15 files changed, 294 insertions(+), 97 deletions(-) create mode 100644 docs/content/plugins/overview.md create mode 100644 docs/content/plugins/using-plugins.md diff --git a/docs/content/https/acme.md b/docs/content/https/acme.md index f07cf410d..de1efe94b 100644 --- a/docs/content/https/acme.md +++ b/docs/content/https/acme.md @@ -284,7 +284,7 @@ For complete details, refer to your provider's _Additional configuration_ link. |-------------------------------------------------------------|----------------|---------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------| | [ACME DNS](https://github.com/joohoi/acme-dns) | `acme-dns` | `ACME_DNS_API_BASE`, `ACME_DNS_STORAGE_PATH` | [Additional configuration](https://go-acme.github.io/lego/dns/acme-dns) | | [Alibaba Cloud](https://www.alibabacloud.com) | `alidns` | `ALICLOUD_ACCESS_KEY`, `ALICLOUD_SECRET_KEY`, `ALICLOUD_REGION_ID` | [Additional configuration](https://go-acme.github.io/lego/dns/alidns) | -| [ArvanCloud](https://arvancloud.com) | `arvancloud` | `ARVANCLOUD_API_KEY` | [Additional configuration](https://go-acme.github.io/lego/dns/arvancloud) | +| [ArvanCloud](https://www.arvancloud.com/en) | `arvancloud` | `ARVANCLOUD_API_KEY` | [Additional configuration](https://go-acme.github.io/lego/dns/arvancloud) | | [Auroradns](https://www.pcextreme.com/dns-health-checks) | `auroradns` | `AURORA_USER_ID`, `AURORA_KEY`, `AURORA_ENDPOINT` | [Additional configuration](https://go-acme.github.io/lego/dns/auroradns) | | [Autodns](https://www.internetx.com/domains/autodns/) | `autodns` | `AUTODNS_API_USER`, `AUTODNS_API_PASSWORD` | [Additional configuration](https://go-acme.github.io/lego/dns/autodns) | | [Azure](https://azure.microsoft.com/services/dns/) | `azure` | `AZURE_CLIENT_ID`, `AZURE_CLIENT_SECRET`, `AZURE_SUBSCRIPTION_ID`, `AZURE_TENANT_ID`, `AZURE_RESOURCE_GROUP`, `[AZURE_METADATA_ENDPOINT]` | [Additional configuration](https://go-acme.github.io/lego/dns/azure) | diff --git a/docs/content/plugins/overview.md b/docs/content/plugins/overview.md new file mode 100644 index 000000000..902b61a75 --- /dev/null +++ b/docs/content/plugins/overview.md @@ -0,0 +1,35 @@ +# Plugins and Traefik Pilot + +Overview +{: .subtitle} + +Traefik Pilot is a software-as-a-service (SaaS) platform that connects to Traefik to extend its capabilities. +It does this through *plugins*, which are dynamically loaded components that enable new features. + +For example, Traefik plugins can add features to modify requests or headers, issue redirects, add authentication, and so on, providing similar functionality to Traefik [middlewares](https://docs.traefik.io/middlewares/overview/). + +Traefik Pilot can also monitor connected Traefik instances and issue alerts when one is not responding, or when it is subject to security vulnerabilities. + +!!! danger "Experimental Features" + Plugins can potentially modify the behavior of Traefik in unforeseen ways. + Exercise caution when adding new plugins to production Traefik instances. + +## Connecting to Traefik Pilot + +Plugins are available when a Traefik instance is connected to Traefik Pilot. + +To register a new instance and begin working with plugins, login or create an account at the [Traefik Pilot homepage](https://pilot.traefik.io) and choose **Register New Instance**. + +To complete the connection, Traefik Pilot will issue a token that must be added to your Traefik static configuration by following the instructions provided. + +!!! note "Enabling Alerts" + Health and security alerts for registered Traefik instances can be enabled from the Preferences in your [Traefik Pilot Profile](https://pilot.traefik.io/profile). + +## Creating Plugins + +Traefik users can create their own plugins and contribute them to the Traefik Pilot catalog to share them with the community. + +Plugins are written in [Go](https://golang.org/) and their code is executed by an [embedded Go interpreter](https://github.com/containous/yaegi). +There is no need to compile binaries and all plugins are 100% cross-platform. + +To learn more and see code for example Traefik plugins, please see the [developer documentation](https://github.com/containous/plugindemo). diff --git a/docs/content/plugins/using-plugins.md b/docs/content/plugins/using-plugins.md new file mode 100644 index 000000000..d80e92b08 --- /dev/null +++ b/docs/content/plugins/using-plugins.md @@ -0,0 +1,122 @@ +# Using Plugins + +Since v2.3, plugins are available to any Traefik instance that is [registered](overview.md#connecting-to-traefik-pilot) with Traefik Pilot. +Plugins are hosted on GitHub, but you can browse plugins to add to your registered Traefik instances from the Traefik Pilot UI. + +!!! danger "Experimental Features" + Plugins can potentially modify the behavior of Traefik in unforeseen ways. + Exercise caution when adding new plugins to production Traefik instances. + +## Add a Plugin + +To add a new plugin to a Traefik instance, you must modify that instance's static configuration. +The code to be added is provided by the Traefik Pilot UI when you choose **Install the Plugin**. + +In the example below, we add the [`blockpath`](http://github.com/containous/plugin-blockpath) and [`rewritebody`](https://github.com/containous/plugin-rewritebody) plugins: + +```toml tab="File (TOML)" +[entryPoints] +  [entryPoints.web] +    address = ":80" + +[experimental] + [experimental.pilot] + token = "xxxxxxxxx" + +  [experimental.plugins] +    [experimental.plugins.block] +      modulename = "github.com/containous/plugin-blockpath" +      version = "v0.1.2" +    [experimental.plugins.rewrite] +      modulename = "github.com/containous/plugin-rewritebody" +      version = "v0.2.0" +``` + +```yaml tab="File (YAML)" +entryPoints: + web: + address: :80 + +experimental: + pilot: + token: xxxxxxxxx + + plugins: + block: + modulename: github.com/containous/plugin-blockpath + version: v0.1.2 + rewrite: + modulename: github.com/containous/plugin-rewritebody + version: v0.2.0 +``` + +```bash tab="CLI" +--entryPoints.web.address=:80 +--experimental.pilot.token=xxxxxxxxx +--experimental.plugins.block.modulename=github.com/containous/plugin-blockpath +--experimental.plugins.block.version=v0.1.2 +--experimental.plugins.rewrite.modulename=github.com/containous/plugin-rewritebody +--experimental.plugins.rewrite.version=v0.2.0 +``` + +## Configuring Plugins + +Some plugins will need to be configured by adding a dynamic configuration. +For the `bodyrewrite` plugin, for example: + +```yaml tab="Docker" +labels: + - "traefik.http.middlewares.my-rewritebody.plugin.rewrite.rewrites[0].regex=example" + - "traefik.http.middlewares.my-rewritebody.plugin.rewrite.rewrites[0].replacement=test" +``` + +```yaml tab="Kubernetes" +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: my-rewritebody +spec: + plugin: + rewrite: + rewrites: + - regex: example + replacement: test +``` + +```yaml tab="Consul Catalog" +- "traefik.http.middlewares.my-rewritebody.plugin.rewrite.rewrites[0].regex=example" +- "traefik.http.middlewares.my-rewritebody.plugin.rewrite.rewrites[0].replacement=test" +``` + +```json tab="Marathon" +"labels": { + "traefik.http.middlewares.my-rewritebody.plugin.rewrite.rewrites[0].regex": "example", + "traefik.http.middlewares.my-rewritebody.plugin.rewrite.rewrites[0].replacement": "test" +} +``` + +```yaml tab="Rancher" +labels: + - "traefik.http.middlewares.my-rewritebody.plugin.rewrite.rewrites[0].regex=example" + - "traefik.http.middlewares.my-rewritebody.plugin.rewrite.rewrites[0].replacement=test" +``` + +```toml tab="File (TOML)" +[http.middlewares] +  [http.middlewares.my-rewritebody.plugin.rewrite] + lastModified = true + [[http.middlewares.my-rewritebody.plugin.rewrite.rewrites]] +    regex = "example" + replacement = "test" +``` + +```yaml tab="File (YAML)" +http: + middlewares: + my-rewritebody: + plugin: + rewrite: + rewrites: + - regex: example + replacement: test +``` diff --git a/docs/content/reference/dynamic-configuration/docker-labels.yml b/docs/content/reference/dynamic-configuration/docker-labels.yml index 6a02d09e5..05d33bd98 100644 --- a/docs/content/reference/dynamic-configuration/docker-labels.yml +++ b/docs/content/reference/dynamic-configuration/docker-labels.yml @@ -91,26 +91,27 @@ - "traefik.http.middlewares.middleware13.passtlsclientcert.info.subject.province=true" - "traefik.http.middlewares.middleware13.passtlsclientcert.info.subject.serialnumber=true" - "traefik.http.middlewares.middleware13.passtlsclientcert.pem=true" -- "traefik.http.middlewares.middleware14.ratelimit.average=42" -- "traefik.http.middlewares.middleware14.ratelimit.burst=42" -- "traefik.http.middlewares.middleware14.ratelimit.period=42" -- "traefik.http.middlewares.middleware14.ratelimit.sourcecriterion.ipstrategy.depth=42" -- "traefik.http.middlewares.middleware14.ratelimit.sourcecriterion.ipstrategy.excludedips=foobar, foobar" -- "traefik.http.middlewares.middleware14.ratelimit.sourcecriterion.requestheadername=foobar" -- "traefik.http.middlewares.middleware14.ratelimit.sourcecriterion.requesthost=true" -- "traefik.http.middlewares.middleware15.redirectregex.permanent=true" -- "traefik.http.middlewares.middleware15.redirectregex.regex=foobar" -- "traefik.http.middlewares.middleware15.redirectregex.replacement=foobar" -- "traefik.http.middlewares.middleware16.redirectscheme.permanent=true" -- "traefik.http.middlewares.middleware16.redirectscheme.port=foobar" -- "traefik.http.middlewares.middleware16.redirectscheme.scheme=foobar" -- "traefik.http.middlewares.middleware17.replacepath.path=foobar" -- "traefik.http.middlewares.middleware18.replacepathregex.regex=foobar" -- "traefik.http.middlewares.middleware18.replacepathregex.replacement=foobar" -- "traefik.http.middlewares.middleware19.retry.attempts=42" -- "traefik.http.middlewares.middleware20.stripprefix.forceslash=true" -- "traefik.http.middlewares.middleware20.stripprefix.prefixes=foobar, foobar" -- "traefik.http.middlewares.middleware21.stripprefixregex.regex=foobar, foobar" +- "traefik.http.middlewares.middleware14.plugin.foobar.foo=bar" +- "traefik.http.middlewares.middleware15.ratelimit.average=42" +- "traefik.http.middlewares.middleware15.ratelimit.burst=42" +- "traefik.http.middlewares.middleware15.ratelimit.period=42" +- "traefik.http.middlewares.middleware15.ratelimit.sourcecriterion.ipstrategy.depth=42" +- "traefik.http.middlewares.middleware15.ratelimit.sourcecriterion.ipstrategy.excludedips=foobar, foobar" +- "traefik.http.middlewares.middleware15.ratelimit.sourcecriterion.requestheadername=foobar" +- "traefik.http.middlewares.middleware15.ratelimit.sourcecriterion.requesthost=true" +- "traefik.http.middlewares.middleware16.redirectregex.permanent=true" +- "traefik.http.middlewares.middleware16.redirectregex.regex=foobar" +- "traefik.http.middlewares.middleware16.redirectregex.replacement=foobar" +- "traefik.http.middlewares.middleware17.redirectscheme.permanent=true" +- "traefik.http.middlewares.middleware17.redirectscheme.port=foobar" +- "traefik.http.middlewares.middleware17.redirectscheme.scheme=foobar" +- "traefik.http.middlewares.middleware18.replacepath.path=foobar" +- "traefik.http.middlewares.middleware19.replacepathregex.regex=foobar" +- "traefik.http.middlewares.middleware19.replacepathregex.replacement=foobar" +- "traefik.http.middlewares.middleware20.retry.attempts=42" +- "traefik.http.middlewares.middleware21.stripprefix.forceslash=true" +- "traefik.http.middlewares.middleware21.stripprefix.prefixes=foobar, foobar" +- "traefik.http.middlewares.middleware22.stripprefixregex.regex=foobar, foobar" - "traefik.http.routers.router0.entrypoints=foobar, foobar" - "traefik.http.routers.router0.middlewares=foobar, foobar" - "traefik.http.routers.router0.priority=42" @@ -150,8 +151,8 @@ - "traefik.http.services.service01.loadbalancer.sticky.cookie=true" - "traefik.http.services.service01.loadbalancer.sticky.cookie.httponly=true" - "traefik.http.services.service01.loadbalancer.sticky.cookie.name=foobar" -- "traefik.http.services.service01.loadbalancer.sticky.cookie.secure=true" - "traefik.http.services.service01.loadbalancer.sticky.cookie.samesite=foobar" +- "traefik.http.services.service01.loadbalancer.sticky.cookie.secure=true" - "traefik.http.services.service01.loadbalancer.server.port=foobar" - "traefik.http.services.service01.loadbalancer.server.scheme=foobar" - "traefik.tcp.routers.tcprouter0.entrypoints=foobar, foobar" diff --git a/docs/content/reference/dynamic-configuration/file.toml b/docs/content/reference/dynamic-configuration/file.toml index 8691af9cb..8bca1d3f3 100644 --- a/docs/content/reference/dynamic-configuration/file.toml +++ b/docs/content/reference/dynamic-configuration/file.toml @@ -223,42 +223,46 @@ serialNumber = true domainComponent = true [http.middlewares.Middleware14] - [http.middlewares.Middleware14.rateLimit] + [http.middlewares.Middleware14.plugin] + [http.middlewares.Middleware14.plugin.PluginConf] + foo = "bar" + [http.middlewares.Middleware15] + [http.middlewares.Middleware15.rateLimit] average = 42 period = 42 burst = 42 - [http.middlewares.Middleware14.rateLimit.sourceCriterion] + [http.middlewares.Middleware15.rateLimit.sourceCriterion] requestHeaderName = "foobar" requestHost = true - [http.middlewares.Middleware14.rateLimit.sourceCriterion.ipStrategy] + [http.middlewares.Middleware15.rateLimit.sourceCriterion.ipStrategy] depth = 42 excludedIPs = ["foobar", "foobar"] - [http.middlewares.Middleware15] - [http.middlewares.Middleware15.redirectRegex] + [http.middlewares.Middleware16] + [http.middlewares.Middleware16.redirectRegex] regex = "foobar" replacement = "foobar" permanent = true - [http.middlewares.Middleware16] - [http.middlewares.Middleware16.redirectScheme] + [http.middlewares.Middleware17] + [http.middlewares.Middleware17.redirectScheme] scheme = "foobar" port = "foobar" permanent = true - [http.middlewares.Middleware17] - [http.middlewares.Middleware17.replacePath] - path = "foobar" [http.middlewares.Middleware18] - [http.middlewares.Middleware18.replacePathRegex] + [http.middlewares.Middleware18.replacePath] + path = "foobar" + [http.middlewares.Middleware19] + [http.middlewares.Middleware19.replacePathRegex] regex = "foobar" replacement = "foobar" - [http.middlewares.Middleware19] - [http.middlewares.Middleware19.retry] - attempts = 42 [http.middlewares.Middleware20] - [http.middlewares.Middleware20.stripPrefix] + [http.middlewares.Middleware20.retry] + attempts = 42 + [http.middlewares.Middleware21] + [http.middlewares.Middleware21.stripPrefix] prefixes = ["foobar", "foobar"] forceSlash = true - [http.middlewares.Middleware21] - [http.middlewares.Middleware21.stripPrefixRegex] + [http.middlewares.Middleware22] + [http.middlewares.Middleware22.stripPrefixRegex] regex = ["foobar", "foobar"] [tcp] diff --git a/docs/content/reference/dynamic-configuration/file.yaml b/docs/content/reference/dynamic-configuration/file.yaml index 2537abee7..2cbe646c9 100644 --- a/docs/content/reference/dynamic-configuration/file.yaml +++ b/docs/content/reference/dynamic-configuration/file.yaml @@ -254,6 +254,10 @@ http: domainComponent: true serialNumber: true Middleware14: + plugin: + PluginConf: + foo = "bar" + Middleware15: rateLimit: average: 42 period: 42 @@ -266,33 +270,33 @@ http: - foobar requestHeaderName: foobar requestHost: true - Middleware15: + Middleware16: redirectRegex: regex: foobar replacement: foobar permanent: true - Middleware16: + Middleware17: redirectScheme: scheme: foobar port: foobar permanent: true - Middleware17: + Middleware18: replacePath: path: foobar - Middleware18: + Middleware19: replacePathRegex: regex: foobar replacement: foobar - Middleware19: + Middleware20: retry: attempts: 42 - Middleware20: + Middleware21: stripPrefix: prefixes: - foobar - foobar forceSlash: true - Middleware21: + Middleware22: stripPrefixRegex: regex: - foobar diff --git a/docs/content/reference/dynamic-configuration/kv-ref.md b/docs/content/reference/dynamic-configuration/kv-ref.md index ccb16a95b..cc1ab5b72 100644 --- a/docs/content/reference/dynamic-configuration/kv-ref.md +++ b/docs/content/reference/dynamic-configuration/kv-ref.md @@ -105,29 +105,30 @@ | `traefik/http/middlewares/Middleware13/passTLSClientCert/info/subject/province` | `true` | | `traefik/http/middlewares/Middleware13/passTLSClientCert/info/subject/serialNumber` | `true` | | `traefik/http/middlewares/Middleware13/passTLSClientCert/pem` | `true` | -| `traefik/http/middlewares/Middleware14/rateLimit/average` | `42` | -| `traefik/http/middlewares/Middleware14/rateLimit/burst` | `42` | -| `traefik/http/middlewares/Middleware14/rateLimit/period` | `42` | -| `traefik/http/middlewares/Middleware14/rateLimit/sourceCriterion/ipStrategy/depth` | `42` | -| `traefik/http/middlewares/Middleware14/rateLimit/sourceCriterion/ipStrategy/excludedIPs/0` | `foobar` | -| `traefik/http/middlewares/Middleware14/rateLimit/sourceCriterion/ipStrategy/excludedIPs/1` | `foobar` | -| `traefik/http/middlewares/Middleware14/rateLimit/sourceCriterion/requestHeaderName` | `foobar` | -| `traefik/http/middlewares/Middleware14/rateLimit/sourceCriterion/requestHost` | `true` | -| `traefik/http/middlewares/Middleware15/redirectRegex/permanent` | `true` | -| `traefik/http/middlewares/Middleware15/redirectRegex/regex` | `foobar` | -| `traefik/http/middlewares/Middleware15/redirectRegex/replacement` | `foobar` | -| `traefik/http/middlewares/Middleware16/redirectScheme/permanent` | `true` | -| `traefik/http/middlewares/Middleware16/redirectScheme/port` | `foobar` | -| `traefik/http/middlewares/Middleware16/redirectScheme/scheme` | `foobar` | -| `traefik/http/middlewares/Middleware17/replacePath/path` | `foobar` | -| `traefik/http/middlewares/Middleware18/replacePathRegex/regex` | `foobar` | -| `traefik/http/middlewares/Middleware18/replacePathRegex/replacement` | `foobar` | -| `traefik/http/middlewares/Middleware19/retry/attempts` | `42` | -| `traefik/http/middlewares/Middleware20/stripPrefix/forceSlash` | `true` | -| `traefik/http/middlewares/Middleware20/stripPrefix/prefixes/0` | `foobar` | -| `traefik/http/middlewares/Middleware20/stripPrefix/prefixes/1` | `foobar` | -| `traefik/http/middlewares/Middleware21/stripPrefixRegex/regex/0` | `foobar` | -| `traefik/http/middlewares/Middleware21/stripPrefixRegex/regex/1` | `foobar` | +| `traefik/http/middlewares/Middleware14/plugin/PluginConf/foo` | `bar` | +| `traefik/http/middlewares/Middleware15/rateLimit/average` | `42` | +| `traefik/http/middlewares/Middleware15/rateLimit/burst` | `42` | +| `traefik/http/middlewares/Middleware15/rateLimit/period` | `42` | +| `traefik/http/middlewares/Middleware15/rateLimit/sourceCriterion/ipStrategy/depth` | `42` | +| `traefik/http/middlewares/Middleware15/rateLimit/sourceCriterion/ipStrategy/excludedIPs/0` | `foobar` | +| `traefik/http/middlewares/Middleware15/rateLimit/sourceCriterion/ipStrategy/excludedIPs/1` | `foobar` | +| `traefik/http/middlewares/Middleware15/rateLimit/sourceCriterion/requestHeaderName` | `foobar` | +| `traefik/http/middlewares/Middleware15/rateLimit/sourceCriterion/requestHost` | `true` | +| `traefik/http/middlewares/Middleware16/redirectRegex/permanent` | `true` | +| `traefik/http/middlewares/Middleware16/redirectRegex/regex` | `foobar` | +| `traefik/http/middlewares/Middleware16/redirectRegex/replacement` | `foobar` | +| `traefik/http/middlewares/Middleware17/redirectScheme/permanent` | `true` | +| `traefik/http/middlewares/Middleware17/redirectScheme/port` | `foobar` | +| `traefik/http/middlewares/Middleware17/redirectScheme/scheme` | `foobar` | +| `traefik/http/middlewares/Middleware18/replacePath/path` | `foobar` | +| `traefik/http/middlewares/Middleware19/replacePathRegex/regex` | `foobar` | +| `traefik/http/middlewares/Middleware19/replacePathRegex/replacement` | `foobar` | +| `traefik/http/middlewares/Middleware20/retry/attempts` | `42` | +| `traefik/http/middlewares/Middleware21/stripPrefix/forceSlash` | `true` | +| `traefik/http/middlewares/Middleware21/stripPrefix/prefixes/0` | `foobar` | +| `traefik/http/middlewares/Middleware21/stripPrefix/prefixes/1` | `foobar` | +| `traefik/http/middlewares/Middleware22/stripPrefixRegex/regex/0` | `foobar` | +| `traefik/http/middlewares/Middleware22/stripPrefixRegex/regex/1` | `foobar` | | `traefik/http/routers/Router0/entryPoints/0` | `foobar` | | `traefik/http/routers/Router0/entryPoints/1` | `foobar` | | `traefik/http/routers/Router0/middlewares/0` | `foobar` | diff --git a/docs/content/reference/dynamic-configuration/marathon-labels.json b/docs/content/reference/dynamic-configuration/marathon-labels.json index f869a0099..3e9552dc0 100644 --- a/docs/content/reference/dynamic-configuration/marathon-labels.json +++ b/docs/content/reference/dynamic-configuration/marathon-labels.json @@ -91,26 +91,27 @@ "traefik.http.middlewares.middleware13.passtlsclientcert.info.subject.province": "true", "traefik.http.middlewares.middleware13.passtlsclientcert.info.subject.serialnumber": "true", "traefik.http.middlewares.middleware13.passtlsclientcert.pem": "true", -"traefik.http.middlewares.middleware14.ratelimit.average": "42", -"traefik.http.middlewares.middleware14.ratelimit.burst": "42", -"traefik.http.middlewares.middleware14.ratelimit.period": "42", -"traefik.http.middlewares.middleware14.ratelimit.sourcecriterion.ipstrategy.depth": "42", -"traefik.http.middlewares.middleware14.ratelimit.sourcecriterion.ipstrategy.excludedips": "foobar, foobar", -"traefik.http.middlewares.middleware14.ratelimit.sourcecriterion.requestheadername": "foobar", -"traefik.http.middlewares.middleware14.ratelimit.sourcecriterion.requesthost": "true", -"traefik.http.middlewares.middleware15.redirectregex.permanent": "true", -"traefik.http.middlewares.middleware15.redirectregex.regex": "foobar", -"traefik.http.middlewares.middleware15.redirectregex.replacement": "foobar", -"traefik.http.middlewares.middleware16.redirectscheme.permanent": "true", -"traefik.http.middlewares.middleware16.redirectscheme.port": "foobar", -"traefik.http.middlewares.middleware16.redirectscheme.scheme": "foobar", -"traefik.http.middlewares.middleware17.replacepath.path": "foobar", -"traefik.http.middlewares.middleware18.replacepathregex.regex": "foobar", -"traefik.http.middlewares.middleware18.replacepathregex.replacement": "foobar", -"traefik.http.middlewares.middleware19.retry.attempts": "42", -"traefik.http.middlewares.middleware20.stripprefix.forceslash": "true", -"traefik.http.middlewares.middleware20.stripprefix.prefixes": "foobar, foobar", -"traefik.http.middlewares.middleware21.stripprefixregex.regex": "foobar, foobar", +"traefik.http.middlewares.middleware14.plugin.foobar.foo": "bar", +"traefik.http.middlewares.middleware15.ratelimit.average": "42", +"traefik.http.middlewares.middleware15.ratelimit.burst": "42", +"traefik.http.middlewares.middleware15.ratelimit.period": "42", +"traefik.http.middlewares.middleware15.ratelimit.sourcecriterion.ipstrategy.depth": "42", +"traefik.http.middlewares.middleware15.ratelimit.sourcecriterion.ipstrategy.excludedips": "foobar, foobar", +"traefik.http.middlewares.middleware15.ratelimit.sourcecriterion.requestheadername": "foobar", +"traefik.http.middlewares.middleware15.ratelimit.sourcecriterion.requesthost": "true", +"traefik.http.middlewares.middleware16.redirectregex.permanent": "true", +"traefik.http.middlewares.middleware16.redirectregex.regex": "foobar", +"traefik.http.middlewares.middleware16.redirectregex.replacement": "foobar", +"traefik.http.middlewares.middleware17.redirectscheme.permanent": "true", +"traefik.http.middlewares.middleware17.redirectscheme.port": "foobar", +"traefik.http.middlewares.middleware17.redirectscheme.scheme": "foobar", +"traefik.http.middlewares.middleware18.replacepath.path": "foobar", +"traefik.http.middlewares.middleware19.replacepathregex.regex": "foobar", +"traefik.http.middlewares.middleware19.replacepathregex.replacement": "foobar", +"traefik.http.middlewares.middleware20.retry.attempts": "42", +"traefik.http.middlewares.middleware21.stripprefix.forceslash": "true", +"traefik.http.middlewares.middleware21.stripprefix.prefixes": "foobar, foobar", +"traefik.http.middlewares.middleware22.stripprefixregex.regex": "foobar, foobar", "traefik.http.routers.router0.entrypoints": "foobar, foobar", "traefik.http.routers.router0.middlewares": "foobar, foobar", "traefik.http.routers.router0.priority": "42", @@ -148,8 +149,8 @@ "traefik.http.services.service01.loadbalancer.sticky.cookie": "true", "traefik.http.services.service01.loadbalancer.sticky.cookie.httponly": "true", "traefik.http.services.service01.loadbalancer.sticky.cookie.name": "foobar", -"traefik.http.services.service01.loadbalancer.sticky.cookie.secure": "true", "traefik.http.services.service01.loadbalancer.sticky.cookie.samesite": "foobar", +"traefik.http.services.service01.loadbalancer.sticky.cookie.secure": "true", "traefik.http.services.service01.loadbalancer.server.port": "foobar", "traefik.http.services.service01.loadbalancer.server.scheme": "foobar", "traefik.tcp.routers.tcprouter0.entrypoints": "foobar, foobar", diff --git a/docs/content/reference/static-configuration/cli-ref.md b/docs/content/reference/static-configuration/cli-ref.md index 43b0bd461..2dc91f248 100644 --- a/docs/content/reference/static-configuration/cli-ref.md +++ b/docs/content/reference/static-configuration/cli-ref.md @@ -168,9 +168,6 @@ plugin's module name. `--experimental.pilot.token`: Traefik Pilot token. -`--experimental.plugins.`: -Plugins configuration. (Default: ```false```) - `--experimental.plugins..modulename`: plugin's module name. diff --git a/docs/content/reference/static-configuration/env-ref.md b/docs/content/reference/static-configuration/env-ref.md index 7747b6482..9681eef08 100644 --- a/docs/content/reference/static-configuration/env-ref.md +++ b/docs/content/reference/static-configuration/env-ref.md @@ -168,9 +168,6 @@ plugin's module name. `TRAEFIK_EXPERIMENTAL_PILOT_TOKEN`: Traefik Pilot token. -`TRAEFIK_EXPERIMENTAL_PLUGINS_`: -Plugins configuration. (Default: ```false```) - `TRAEFIK_EXPERIMENTAL_PLUGINS__MODULENAME`: plugin's module name. diff --git a/docs/content/reference/static-configuration/file.toml b/docs/content/reference/static-configuration/file.toml index e38fc340c..74537d226 100644 --- a/docs/content/reference/static-configuration/file.toml +++ b/docs/content/reference/static-configuration/file.toml @@ -359,3 +359,17 @@ [certificatesResolvers.CertificateResolver1.acme.httpChallenge] entryPoint = "foobar" [certificatesResolvers.CertificateResolver1.acme.tlsChallenge] + +[experimental] + [experimental.pilot] + token = "foobar" + [experimental.plugins] + [experimental.plugins.Descriptor0] + moduleName = "foobar" + version = "foobar" + [experimental.plugins.Descriptor1] + moduleName = "foobar" + version = "foobar" + [experimental.devPlugin] + goPath = "foobar" + moduleName = "foobar" diff --git a/docs/content/reference/static-configuration/file.yaml b/docs/content/reference/static-configuration/file.yaml index 179150c6a..247c20d98 100644 --- a/docs/content/reference/static-configuration/file.yaml +++ b/docs/content/reference/static-configuration/file.yaml @@ -379,3 +379,16 @@ certificatesResolvers: httpChallenge: entryPoint: foobar tlsChallenge: {} +experimental: + pilot: + token: foobar + plugins: + Descriptor0: + moduleName: foobar + version: foobar + Descriptor1: + moduleName: foobar + version: foobar + devPlugin: + goPath: foobar + moduleName: foobar diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 7dcee7420..7a288b61c 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -128,6 +128,9 @@ nav: - 'Retry': 'middlewares/retry.md' - 'StripPrefix': 'middlewares/stripprefix.md' - 'StripPrefixRegex': 'middlewares/stripprefixregex.md' + - 'Plugins & Traefik Pilot': + - 'Overview': 'plugins/overview.md' + - 'Using Plugins': 'plugins/using-plugins.md' - 'Operations': - 'CLI': 'operations/cli.md' - 'Dashboard' : 'operations/dashboard.md' diff --git a/docs/scripts/verify.sh b/docs/scripts/verify.sh index b7830b24c..840232d2c 100755 --- a/docs/scripts/verify.sh +++ b/docs/scripts/verify.sh @@ -21,7 +21,7 @@ find "${PATH_TO_SITE}" -type f -not -path "/app/site/theme/*" \ --check_external_hash \ --alt_ignore="/traefik.logo.png/" \ --http_status_ignore="0,500,501,503" \ - --url_ignore="/https://groups.google.com/a/traefik.io/forum/#!forum/security/,/localhost:/,/127.0.0.1:/,/fonts.gstatic.com/,/.minikube/,/github.com\/containous\/traefik\/*edit*/,/github.com\/containous\/traefik\/$/,/docs.traefik.io/,/github\.com\/golang\/oauth2\/blob\/36a7019397c4c86cf59eeab3bc0d188bac444277\/.+/,/www.akamai.com/" \ + --url_ignore="/https://groups.google.com/a/traefik.io/forum/#!forum/security/,/localhost:/,/127.0.0.1:/,/fonts.gstatic.com/,/.minikube/,/github.com\/containous\/traefik\/*edit*/,/github.com\/containous\/traefik\/$/,/docs.traefik.io/,/github\.com\/golang\/oauth2\/blob\/36a7019397c4c86cf59eeab3bc0d188bac444277\/.+/,/www.akamai.com/,/pilot.traefik.io\/profile/" \ '{}' 1>/dev/null ## HTML-proofer options at https://github.com/gjtorikian/html-proofer#configuration diff --git a/internal/gendoc.go b/internal/gendoc.go index 2228c1348..4175d6345 100644 --- a/internal/gendoc.go +++ b/internal/gendoc.go @@ -57,6 +57,11 @@ THIS FILE MUST NOT BE EDITED BY HAND w.writeln() for i, flat := range flats { + // TODO must be move into the flats creation. + if flat.Name == "experimental.plugins." || flat.Name == "TRAEFIK_EXPERIMENTAL_PLUGINS_" { + continue + } + w.writeln("`" + prefix + strings.ReplaceAll(flat.Name, "[0]", "[n]") + "`: ") if flat.Default == "" { w.writeln(flat.Description)