Merge current v2.7 into v2.8

This commit is contained in:
romain 2022-06-29 15:57:57 +02:00
commit aa8fda5eae
11 changed files with 84 additions and 41 deletions

View file

@ -1,3 +1,12 @@
## [v2.7.3](https://github.com/traefik/traefik/tree/v2.7.3) (2022-06-29)
[All Commits](https://github.com/traefik/traefik/compare/v2.7.2...v2.7.3)
**Bug fixes:**
- **[metrics]** Ensure Datadog client is cleanly stopped ([#9137](https://github.com/traefik/traefik/pull/9137) by [jbdoumenjou](https://github.com/jbdoumenjou))
**Documentation:**
- **[middleware,k8s/crd]** Add documentation for main, SANs and plugin CRD fields ([#9136](https://github.com/traefik/traefik/pull/9136) by [mloiseleur](https://github.com/mloiseleur))
## [v2.8.0-rc2](https://github.com/traefik/traefik/tree/v2.8.0-rc2) (2022-06-27) ## [v2.8.0-rc2](https://github.com/traefik/traefik/tree/v2.8.0-rc2) (2022-06-27)
[All Commits](https://github.com/traefik/traefik/compare/v2.8.0-rc1...v2.8.0-rc2) [All Commits](https://github.com/traefik/traefik/compare/v2.8.0-rc1...v2.8.0-rc2)

View file

@ -153,3 +153,7 @@ http:
| [Retry](retry.md) | Automatically retries in case of error | Request lifecycle | | [Retry](retry.md) | Automatically retries in case of error | Request lifecycle |
| [StripPrefix](stripprefix.md) | Changes the path of the request | Path Modifier | | [StripPrefix](stripprefix.md) | Changes the path of the request | Path Modifier |
| [StripPrefixRegex](stripprefixregex.md) | Changes the path of the request | Path Modifier | | [StripPrefixRegex](stripprefixregex.md) | Changes the path of the request | Path Modifier |
## Community Middlewares
Please take a look at the community-contributed plugins in the [plugin catalog](https://pilot.traefik.io/plugins).

View file

@ -204,8 +204,11 @@ spec:
description: Domain holds a domain name with SANs. description: Domain holds a domain name with SANs.
properties: properties:
main: main:
description: Main defines the main domain name.
type: string type: string
sans: sans:
description: SANs defines the subject alternative domain
names.
items: items:
type: string type: string
type: array type: array
@ -408,8 +411,11 @@ spec:
description: Domain holds a domain name with SANs. description: Domain holds a domain name with SANs.
properties: properties:
main: main:
description: Main defines the main domain name.
type: string type: string
sans: sans:
description: SANs defines the subject alternative domain
names.
items: items:
type: string type: string
type: array type: array
@ -1300,6 +1306,8 @@ spec:
plugin: plugin:
additionalProperties: additionalProperties:
x-kubernetes-preserve-unknown-fields: true x-kubernetes-preserve-unknown-fields: true
description: 'Plugin defines the middleware plugin configuration.
More info: https://doc.traefik.io/traefik/plugins/'
type: object type: object
rateLimit: rateLimit:
description: 'RateLimit holds the rate limit configuration. This middleware description: 'RateLimit holds the rate limit configuration. This middleware

View file

@ -204,8 +204,11 @@ spec:
description: Domain holds a domain name with SANs. description: Domain holds a domain name with SANs.
properties: properties:
main: main:
description: Main defines the main domain name.
type: string type: string
sans: sans:
description: SANs defines the subject alternative domain
names.
items: items:
type: string type: string
type: array type: array

View file

@ -143,8 +143,11 @@ spec:
description: Domain holds a domain name with SANs. description: Domain holds a domain name with SANs.
properties: properties:
main: main:
description: Main defines the main domain name.
type: string type: string
sans: sans:
description: SANs defines the subject alternative domain
names.
items: items:
type: string type: string
type: array type: array

View file

@ -729,6 +729,8 @@ spec:
plugin: plugin:
additionalProperties: additionalProperties:
x-kubernetes-preserve-unknown-fields: true x-kubernetes-preserve-unknown-fields: true
description: 'Plugin defines the middleware plugin configuration.
More info: https://doc.traefik.io/traefik/plugins/'
type: object type: object
rateLimit: rateLimit:
description: 'RateLimit holds the rate limit configuration. This middleware description: 'RateLimit holds the rate limit configuration. This middleware

View file

@ -204,8 +204,11 @@ spec:
description: Domain holds a domain name with SANs. description: Domain holds a domain name with SANs.
properties: properties:
main: main:
description: Main defines the main domain name.
type: string type: string
sans: sans:
description: SANs defines the subject alternative domain
names.
items: items:
type: string type: string
type: array type: array
@ -408,8 +411,11 @@ spec:
description: Domain holds a domain name with SANs. description: Domain holds a domain name with SANs.
properties: properties:
main: main:
description: Main defines the main domain name.
type: string type: string
sans: sans:
description: SANs defines the subject alternative domain
names.
items: items:
type: string type: string
type: array type: array
@ -1300,6 +1306,8 @@ spec:
plugin: plugin:
additionalProperties: additionalProperties:
x-kubernetes-preserve-unknown-fields: true x-kubernetes-preserve-unknown-fields: true
description: 'Plugin defines the middleware plugin configuration.
More info: https://doc.traefik.io/traefik/plugins/'
type: object type: object
rateLimit: rateLimit:
description: 'RateLimit holds the rate limit configuration. This middleware description: 'RateLimit holds the rate limit configuration. This middleware

View file

@ -13,7 +13,7 @@ import (
var ( var (
datadogClient *dogstatsd.Dogstatsd datadogClient *dogstatsd.Dogstatsd
datadogTicker *time.Ticker datadogLoopCancelFunc context.CancelFunc
) )
// Metric names consistent with https://github.com/DataDog/integrations-extras/pull/64 // Metric names consistent with https://github.com/DataDog/integrations-extras/pull/64
@ -44,6 +44,9 @@ const (
// RegisterDatadog registers the metrics pusher if this didn't happen yet and creates a datadog Registry instance. // RegisterDatadog registers the metrics pusher if this didn't happen yet and creates a datadog Registry instance.
func RegisterDatadog(ctx context.Context, config *types.Datadog) Registry { func RegisterDatadog(ctx context.Context, config *types.Datadog) Registry {
// Ensures there is only one DataDog client sending metrics at any given time.
StopDatadog()
// just to be sure there is a prefix defined // just to be sure there is a prefix defined
if config.Prefix == "" { if config.Prefix == "" {
config.Prefix = defaultMetricsPrefix config.Prefix = defaultMetricsPrefix
@ -54,9 +57,7 @@ func RegisterDatadog(ctx context.Context, config *types.Datadog) Registry {
return nil return nil
})) }))
if datadogTicker == nil { initDatadogClient(ctx, config)
datadogTicker = initDatadogClient(ctx, config)
}
registry := &standardRegistry{ registry := &standardRegistry{
configReloadsCounter: datadogClient.NewCounter(ddConfigReloadsName, 1.0), configReloadsCounter: datadogClient.NewCounter(ddConfigReloadsName, 1.0),
@ -95,25 +96,26 @@ func RegisterDatadog(ctx context.Context, config *types.Datadog) Registry {
return registry return registry
} }
func initDatadogClient(ctx context.Context, config *types.Datadog) *time.Ticker { func initDatadogClient(ctx context.Context, config *types.Datadog) {
address := config.Address address := config.Address
if len(address) == 0 { if len(address) == 0 {
address = "localhost:8125" address = "localhost:8125"
} }
report := time.NewTicker(time.Duration(config.PushInterval)) ctx, datadogLoopCancelFunc = context.WithCancel(ctx)
safe.Go(func() { safe.Go(func() {
datadogClient.SendLoop(ctx, report.C, "udp", address) ticker := time.NewTicker(time.Duration(config.PushInterval))
defer ticker.Stop()
datadogClient.SendLoop(ctx, ticker.C, "udp", address)
}) })
return report
} }
// StopDatadog stops internal datadogTicker which controls the pushing of metrics to DD Agent and resets it to `nil`. // StopDatadog stops the Datadog metrics pusher.
func StopDatadog() { func StopDatadog() {
if datadogTicker != nil { if datadogLoopCancelFunc != nil {
datadogTicker.Stop() datadogLoopCancelFunc()
datadogLoopCancelFunc = nil
} }
datadogTicker = nil
} }

View file

@ -48,6 +48,8 @@ type MiddlewareSpec struct {
PassTLSClientCert *dynamic.PassTLSClientCert `json:"passTLSClientCert,omitempty"` PassTLSClientCert *dynamic.PassTLSClientCert `json:"passTLSClientCert,omitempty"`
Retry *Retry `json:"retry,omitempty"` Retry *Retry `json:"retry,omitempty"`
ContentType *dynamic.ContentType `json:"contentType,omitempty"` ContentType *dynamic.ContentType `json:"contentType,omitempty"`
// Plugin defines the middleware plugin configuration.
// More info: https://doc.traefik.io/traefik/plugins/
Plugin map[string]apiextensionv1.JSON `json:"plugin,omitempty"` Plugin map[string]apiextensionv1.JSON `json:"plugin,omitempty"`
} }

View file

@ -8,7 +8,9 @@ import (
// Domain holds a domain name with SANs. // Domain holds a domain name with SANs.
type Domain struct { type Domain struct {
// Main defines the main domain name.
Main string `description:"Default subject name." json:"main,omitempty" toml:"main,omitempty" yaml:"main,omitempty"` Main string `description:"Default subject name." json:"main,omitempty" toml:"main,omitempty" yaml:"main,omitempty"`
// SANs defines the subject alternative domain names.
SANs []string `description:"Subject alternative names." json:"sans,omitempty" toml:"sans,omitempty" yaml:"sans,omitempty"` SANs []string `description:"Subject alternative names." json:"sans,omitempty" toml:"sans,omitempty" yaml:"sans,omitempty"`
} }

View file

@ -4,11 +4,11 @@ RepositoryName = "traefik"
OutputType = "file" OutputType = "file"
FileName = "traefik_changelog.md" FileName = "traefik_changelog.md"
# example new bugfix v2.7.2 # example new bugfix v2.7.3
CurrentRef = "v2.7" CurrentRef = "v2.7"
PreviousRef = "v2.7.1" PreviousRef = "v2.7.2"
BaseBranch = "v2.7" BaseBranch = "v2.7"
FutureCurrentRefName = "v2.7.2" FutureCurrentRefName = "v2.7.3"
ThresholdPreviousRef = 10 ThresholdPreviousRef = 10
ThresholdCurrentRef = 10 ThresholdCurrentRef = 10