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:
5
flags.go
5
flags.go
@@ -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"},
|
||||
}
|
||||
)
|
||||
|
||||
2
main.go
2
main.go
@@ -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},
|
||||
|
||||
16
manage.go
16
manage.go
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user