28 lines
972 B
Go
28 lines
972 B
Go
|
package provider
|
||
|
|
||
|
import "github.com/containous/traefik/pkg/types"
|
||
|
|
||
|
// Constrainer Filter services by constraint, matching with Traefik tags.
|
||
|
type Constrainer struct {
|
||
|
Constraints types.Constraints `description:"Filter services by constraint, matching with Traefik tags." export:"true"`
|
||
|
}
|
||
|
|
||
|
// MatchConstraints must match with EVERY single constraint
|
||
|
// returns first constraint that do not match or nil.
|
||
|
func (c *Constrainer) MatchConstraints(tags []string) (bool, *types.Constraint) {
|
||
|
// if there is no tags and no constraints, filtering is disabled
|
||
|
if len(tags) == 0 && len(c.Constraints) == 0 {
|
||
|
return true, nil
|
||
|
}
|
||
|
|
||
|
for _, constraint := range c.Constraints {
|
||
|
// xor: if ok and constraint.MustMatch are equal, then no tag is currently matching with the constraint
|
||
|
if ok := constraint.MatchConstraintWithAtLeastOneTag(tags); ok != constraint.MustMatch {
|
||
|
return false, constraint
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// If no constraint or every constraints matching
|
||
|
return true, nil
|
||
|
}
|