Rename traefik.docker.* labels for Docker Swarm to traefik.swarm.*
This commit is contained in:
parent
f547f1b22b
commit
514914639a
10 changed files with 152 additions and 93 deletions
|
@ -1,8 +1,10 @@
|
|||
package docker
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/traefik/traefik/v3/pkg/config/label"
|
||||
)
|
||||
|
||||
|
@ -11,29 +13,73 @@ const (
|
|||
labelDockerComposeService = "com.docker.compose.service"
|
||||
)
|
||||
|
||||
// configuration Contains information from the labels that are globals (not related to the dynamic configuration)
|
||||
// configuration contains information from the labels that are globals (not related to the dynamic configuration)
|
||||
// or specific to the provider.
|
||||
type configuration struct {
|
||||
Enable bool
|
||||
Docker specificConfiguration
|
||||
}
|
||||
|
||||
type specificConfiguration struct {
|
||||
Enable bool
|
||||
Network string
|
||||
LBSwarm bool
|
||||
}
|
||||
|
||||
func (p *Shared) extractLabels(container dockerData) (configuration, error) {
|
||||
conf := configuration{
|
||||
Enable: p.ExposedByDefault,
|
||||
Docker: specificConfiguration{
|
||||
Network: p.Network,
|
||||
},
|
||||
type labelConfiguration struct {
|
||||
Enable bool
|
||||
Docker *specificConfiguration
|
||||
Swarm *specificConfiguration
|
||||
}
|
||||
|
||||
type specificConfiguration struct {
|
||||
Network *string
|
||||
LBSwarm bool
|
||||
}
|
||||
|
||||
func (p *Shared) extractDockerLabels(container dockerData) (configuration, error) {
|
||||
conf := labelConfiguration{Enable: p.ExposedByDefault}
|
||||
if err := label.Decode(container.Labels, &conf, "traefik.docker.", "traefik.enable"); err != nil {
|
||||
return configuration{}, fmt.Errorf("decoding Docker labels: %w", err)
|
||||
}
|
||||
|
||||
err := label.Decode(container.Labels, &conf, "traefik.docker.", "traefik.enable")
|
||||
if err != nil {
|
||||
return configuration{}, err
|
||||
network := p.Network
|
||||
if conf.Docker != nil && conf.Docker.Network != nil {
|
||||
network = *conf.Docker.Network
|
||||
}
|
||||
|
||||
return configuration{
|
||||
Enable: conf.Enable,
|
||||
Network: network,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (p *Shared) extractSwarmLabels(container dockerData) (configuration, error) {
|
||||
labelConf := labelConfiguration{Enable: p.ExposedByDefault}
|
||||
if err := label.Decode(container.Labels, &labelConf, "traefik.enable", "traefik.docker.", "traefik.swarm."); err != nil {
|
||||
return configuration{}, fmt.Errorf("decoding Swarm labels: %w", err)
|
||||
}
|
||||
|
||||
if labelConf.Docker != nil && labelConf.Swarm != nil {
|
||||
return configuration{}, errors.New("both Docker and Swarm labels are defined")
|
||||
}
|
||||
|
||||
conf := configuration{
|
||||
Enable: labelConf.Enable,
|
||||
Network: p.Network,
|
||||
}
|
||||
|
||||
if labelConf.Docker != nil {
|
||||
log.Warn().Msg("Labels traefik.docker.* for Swarm provider are deprecated. Please use traefik.swarm.* labels instead")
|
||||
|
||||
conf.LBSwarm = labelConf.Docker.LBSwarm
|
||||
|
||||
if labelConf.Docker.Network != nil {
|
||||
conf.Network = *labelConf.Docker.Network
|
||||
}
|
||||
}
|
||||
|
||||
if labelConf.Swarm != nil {
|
||||
conf.LBSwarm = labelConf.Swarm.LBSwarm
|
||||
|
||||
if labelConf.Swarm.Network != nil {
|
||||
conf.Network = *labelConf.Swarm.Network
|
||||
}
|
||||
}
|
||||
|
||||
return conf, nil
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue