1
0
mirror of https://github.com/docker/docs.git synced 2026-10-31 10:34:26 +03:00

Merge pull request #176 from vieux/filter_flag

add --filter flag to choose the filters to use
This commit is contained in:
Andrea Luzzardi
2014-12-16 16:06:57 -08:00
4 changed files with 47 additions and 6 deletions

View File

@@ -55,4 +55,9 @@ var (
Usage: "PlacementStrategy to use [binpacking, random]",
Value: "binpacking:0.05",
}
flFilter = cli.StringSliceFlag{
Name: "filter, f",
Usage: "Filter to use [health, label, port]",
Value: &cli.StringSlice{"health", "label", "port"},
}
)

View File

@@ -82,7 +82,7 @@ func main() {
ShortName: "m",
Usage: "manage a docker cluster",
Flags: []cli.Flag{
flStrategy,
flStrategy, flFilter,
flDiscovery, flHosts, flHeartBeat,
flTls, flTlsCaCert, flTlsCert, flTlsKey, flTlsVerify,
flEnableCors},

View File

@@ -102,14 +102,20 @@ func manage(c *cli.Context) {
if err != nil {
log.Fatal(err)
}
// see https://github.com/codegangsta/cli/issues/160
names := c.StringSlice("filter")
if c.IsSet("filter") || c.IsSet("f") {
names = names[3:]
}
fs, err := filter.New(names)
if err != nil {
log.Fatal(err)
}
sched := scheduler.NewScheduler(
cluster,
s,
[]filter.Filter{
&filter.HealthFilter{},
&filter.LabelFilter{},
&filter.PortFilter{},
},
fs,
)
// see https://github.com/codegangsta/cli/issues/160

View File

@@ -1,6 +1,9 @@
package filter
import (
"errors"
log "github.com/Sirupsen/logrus"
"github.com/docker/swarm/cluster"
"github.com/samalba/dockerclient"
)
@@ -10,6 +13,33 @@ type Filter interface {
Filter(*dockerclient.ContainerConfig, []*cluster.Node) ([]*cluster.Node, error)
}
var (
filters map[string]Filter
ErrNotSupported = errors.New("filter not supported")
)
func init() {
filters = map[string]Filter{
"health": &HealthFilter{},
"label": &LabelFilter{},
"port": &PortFilter{},
}
}
func New(names []string) ([]Filter, error) {
var selectedFilters []Filter
for _, name := range names {
if filter, exists := filters[name]; exists {
log.Debugf("Initialising %q filter", name)
selectedFilters = append(selectedFilters, filter)
} else {
return nil, ErrNotSupported
}
}
return selectedFilters, nil
}
// Apply a set of filters in batch.
func ApplyFilters(filters []Filter, config *dockerclient.ContainerConfig, nodes []*cluster.Node) ([]*cluster.Node, error) {
var err error