mirror of https://github.com/docker/docs.git
39 lines
771 B
Go
39 lines
771 B
Go
package filter
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/docker/swarm/cluster"
|
|
"github.com/docker/swarm/scheduler/node"
|
|
)
|
|
|
|
var (
|
|
// ErrNoHealthyNodeAvailable is exported
|
|
ErrNoHealthyNodeAvailable = errors.New("No healthy node available in the cluster")
|
|
)
|
|
|
|
// HealthFilter only schedules containers on healthy nodes.
|
|
type HealthFilter struct {
|
|
}
|
|
|
|
// Name returns the name of the filter
|
|
func (f *HealthFilter) Name() string {
|
|
return "health"
|
|
}
|
|
|
|
// Filter is exported
|
|
func (f *HealthFilter) Filter(_ *cluster.ContainerConfig, nodes []*node.Node) ([]*node.Node, error) {
|
|
result := []*node.Node{}
|
|
for _, node := range nodes {
|
|
if node.IsHealthy {
|
|
result = append(result, node)
|
|
}
|
|
}
|
|
|
|
if len(result) == 0 {
|
|
return nil, ErrNoHealthyNodeAvailable
|
|
}
|
|
|
|
return result, nil
|
|
}
|