mirror of https://github.com/docker/docs.git
35 lines
843 B
Go
35 lines
843 B
Go
package strategy
|
|
|
|
import (
|
|
"math/rand"
|
|
"time"
|
|
|
|
"github.com/docker/swarm/cluster"
|
|
"github.com/docker/swarm/scheduler/node"
|
|
)
|
|
|
|
// RandomPlacementStrategy randomly places the container into the cluster.
|
|
type RandomPlacementStrategy struct {
|
|
r *rand.Rand
|
|
}
|
|
|
|
// Initialize a RandomPlacementStrategy.
|
|
func (p *RandomPlacementStrategy) Initialize() error {
|
|
p.r = rand.New(rand.NewSource(time.Now().UTC().UnixNano()))
|
|
return nil
|
|
}
|
|
|
|
// Name returns the name of the strategy.
|
|
func (p *RandomPlacementStrategy) Name() string {
|
|
return "random"
|
|
}
|
|
|
|
// RankAndSort randomly sorts the list of nodes.
|
|
func (p *RandomPlacementStrategy) RankAndSort(config *cluster.ContainerConfig, nodes []*node.Node) ([]*node.Node, error) {
|
|
for i := len(nodes) - 1; i > 0; i-- {
|
|
j := p.r.Intn(i + 1)
|
|
nodes[i], nodes[j] = nodes[j], nodes[i]
|
|
}
|
|
return nodes, nil
|
|
}
|