Segment labels: Docker
This commit is contained in:
parent
c762b9bb2e
commit
4802484729
28 changed files with 4095 additions and 2464 deletions
214
provider/docker/deprecated_container.go
Normal file
214
provider/docker/deprecated_container.go
Normal file
|
@ -0,0 +1,214 @@
|
|||
package docker
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/containous/traefik/log"
|
||||
"github.com/containous/traefik/provider"
|
||||
"github.com/containous/traefik/provider/label"
|
||||
"github.com/docker/go-connections/nat"
|
||||
)
|
||||
|
||||
// Specific functions
|
||||
|
||||
// Deprecated
|
||||
func (p Provider) getFrontendNameV1(container dockerData, idx int) string {
|
||||
return provider.Normalize(p.getFrontendRuleV1(container) + "-" + strconv.Itoa(idx))
|
||||
}
|
||||
|
||||
// GetFrontendRule returns the frontend rule for the specified container, using
|
||||
// it's label. It returns a default one (Host) if the label is not present.
|
||||
// Deprecated
|
||||
func (p Provider) getFrontendRuleV1(container dockerData) string {
|
||||
if value := label.GetStringValue(container.Labels, label.TraefikFrontendRule, ""); len(value) != 0 {
|
||||
return value
|
||||
}
|
||||
|
||||
if values, err := label.GetStringMultipleStrict(container.Labels, labelDockerComposeProject, labelDockerComposeService); err == nil {
|
||||
return "Host:" + getSubDomain(values[labelDockerComposeService]+"."+values[labelDockerComposeProject]) + "." + p.Domain
|
||||
}
|
||||
|
||||
if len(p.Domain) > 0 {
|
||||
return "Host:" + getSubDomain(container.ServiceName) + "." + p.Domain
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func getBackendNameV1(container dockerData) string {
|
||||
if value := label.GetStringValue(container.Labels, label.TraefikBackend, ""); len(value) != 0 {
|
||||
return provider.Normalize(value)
|
||||
}
|
||||
|
||||
if values, err := label.GetStringMultipleStrict(container.Labels, labelDockerComposeProject, labelDockerComposeService); err == nil {
|
||||
return provider.Normalize(values[labelDockerComposeService] + "_" + values[labelDockerComposeProject])
|
||||
}
|
||||
|
||||
return provider.Normalize(container.ServiceName)
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func getPortV1(container dockerData) string {
|
||||
if value := label.GetStringValue(container.Labels, label.TraefikPort, ""); len(value) != 0 {
|
||||
return value
|
||||
}
|
||||
|
||||
// See iteration order in https://blog.golang.org/go-maps-in-action
|
||||
var ports []nat.Port
|
||||
for port := range container.NetworkSettings.Ports {
|
||||
ports = append(ports, port)
|
||||
}
|
||||
|
||||
less := func(i, j nat.Port) bool {
|
||||
return i.Int() < j.Int()
|
||||
}
|
||||
nat.Sort(ports, less)
|
||||
|
||||
if len(ports) > 0 {
|
||||
min := ports[0]
|
||||
return min.Port()
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
// replaced by Stickiness
|
||||
// Deprecated
|
||||
func getStickyV1(container dockerData) bool {
|
||||
if label.Has(container.Labels, label.TraefikBackendLoadBalancerSticky) {
|
||||
log.Warnf("Deprecated configuration found: %s. Please use %s.", label.TraefikBackendLoadBalancerSticky, label.TraefikBackendLoadBalancerStickiness)
|
||||
}
|
||||
|
||||
return label.GetBoolValue(container.Labels, label.TraefikBackendLoadBalancerSticky, false)
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func hasLoadBalancerLabelV1(container dockerData) bool {
|
||||
method := label.Has(container.Labels, label.TraefikBackendLoadBalancerMethod)
|
||||
sticky := label.Has(container.Labels, label.TraefikBackendLoadBalancerSticky)
|
||||
stickiness := label.Has(container.Labels, label.TraefikBackendLoadBalancerStickiness)
|
||||
cookieName := label.Has(container.Labels, label.TraefikBackendLoadBalancerStickinessCookieName)
|
||||
return method || sticky || stickiness || cookieName
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func hasMaxConnLabelsV1(container dockerData) bool {
|
||||
mca := label.Has(container.Labels, label.TraefikBackendMaxConnAmount)
|
||||
mcef := label.Has(container.Labels, label.TraefikBackendMaxConnExtractorFunc)
|
||||
return mca && mcef
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func hasRedirectV1(container dockerData) bool {
|
||||
return hasLabelV1(label.TraefikFrontendRedirectEntryPoint)(container) ||
|
||||
hasLabelV1(label.TraefikFrontendRedirectReplacement)(container) && hasLabelV1(label.TraefikFrontendRedirectRegex)(container)
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func hasHeadersV1(container dockerData) bool {
|
||||
for key := range container.Labels {
|
||||
if strings.HasPrefix(key, label.Prefix+"frontend.headers.") {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// Label functions
|
||||
|
||||
// Deprecated
|
||||
func getFuncStringLabelV1(labelName string, defaultValue string) func(container dockerData) string {
|
||||
return func(container dockerData) string {
|
||||
return label.GetStringValue(container.Labels, labelName, defaultValue)
|
||||
}
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func getFuncBoolLabelV1(labelName string, defaultValue bool) func(container dockerData) bool {
|
||||
return func(container dockerData) bool {
|
||||
return label.GetBoolValue(container.Labels, labelName, defaultValue)
|
||||
}
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func getFuncSliceStringLabelV1(labelName string) func(container dockerData) []string {
|
||||
return func(container dockerData) []string {
|
||||
return label.GetSliceStringValue(container.Labels, labelName)
|
||||
}
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func getFuncIntLabelV1(labelName string, defaultValue int) func(container dockerData) int {
|
||||
return func(container dockerData) int {
|
||||
return label.GetIntValue(container.Labels, labelName, defaultValue)
|
||||
}
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func getFuncInt64LabelV1(labelName string, defaultValue int64) func(container dockerData) int64 {
|
||||
return func(container dockerData) int64 {
|
||||
return label.GetInt64Value(container.Labels, labelName, defaultValue)
|
||||
}
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func hasFuncV1(labelName string) func(container dockerData) bool {
|
||||
return func(container dockerData) bool {
|
||||
return label.Has(container.Labels, labelName)
|
||||
}
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func hasLabelV1(label string) func(container dockerData) bool {
|
||||
return func(container dockerData) bool {
|
||||
lbl, err := getLabelV1(container, label)
|
||||
return err == nil && len(lbl) > 0
|
||||
}
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func getLabelV1(container dockerData, label string) (string, error) {
|
||||
if value, ok := container.Labels[label]; ok {
|
||||
return value, nil
|
||||
}
|
||||
return "", fmt.Errorf("label not found: %s", label)
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func getFuncMapLabelV1(labelName string) func(container dockerData) map[string]string {
|
||||
return func(container dockerData) map[string]string {
|
||||
return parseMapLabelV1(container, labelName)
|
||||
}
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
func parseMapLabelV1(container dockerData, labelName string) map[string]string {
|
||||
if parts, err := getLabelV1(container, labelName); err == nil {
|
||||
if len(parts) == 0 {
|
||||
log.Errorf("Could not load %q", labelName)
|
||||
return nil
|
||||
}
|
||||
|
||||
values := make(map[string]string)
|
||||
for _, headers := range strings.Split(parts, "||") {
|
||||
pair := strings.SplitN(headers, ":", 2)
|
||||
if len(pair) != 2 {
|
||||
log.Warnf("Could not load %q: %v, skipping...", labelName, pair)
|
||||
} else {
|
||||
values[http.CanonicalHeaderKey(strings.TrimSpace(pair[0]))] = strings.TrimSpace(pair[1])
|
||||
}
|
||||
}
|
||||
|
||||
if len(values) == 0 {
|
||||
log.Errorf("Could not load %q", labelName)
|
||||
return nil
|
||||
}
|
||||
return values
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue