mirror of https://github.com/docker/docs.git
move list of node to swarm only
Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
parent
47e03120f5
commit
4bfeb4b640
|
|
@ -6,6 +6,7 @@ import (
|
|||
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/docker/swarm/cluster"
|
||||
"github.com/docker/swarm/scheduler"
|
||||
"github.com/samalba/dockerclient"
|
||||
)
|
||||
|
||||
|
|
@ -16,17 +17,17 @@ type MesosCluster struct {
|
|||
|
||||
//TODO: list of mesos masters
|
||||
//TODO: list of offers
|
||||
nodes *cluster.Nodes
|
||||
scheduler *scheduler.Scheduler
|
||||
options *cluster.Options
|
||||
}
|
||||
|
||||
func NewCluster(options *cluster.Options) cluster.Cluster {
|
||||
func NewCluster(scheduler *scheduler.Scheduler, options *cluster.Options) cluster.Cluster {
|
||||
log.WithFields(log.Fields{"name": "mesos"}).Debug("Initializing cluster")
|
||||
|
||||
//TODO: get the list of mesos masters using options.Discovery (zk://<ip1>,<ip2>,<ip3>/mesos)
|
||||
|
||||
return &MesosCluster{
|
||||
nodes: cluster.NewNodes(),
|
||||
scheduler: scheduler,
|
||||
options: options,
|
||||
}
|
||||
}
|
||||
|
|
@ -37,7 +38,8 @@ func (s *MesosCluster) CreateContainer(config *dockerclient.ContainerConfig, nam
|
|||
s.Lock()
|
||||
defer s.Unlock()
|
||||
|
||||
//TODO: pick the right offer (using strategy & filters ???)
|
||||
//TODO: pick the right offer (using strategy & filters)
|
||||
//offer, err := s.scheduler.SelectNodeForContainer(s.offers, config)
|
||||
|
||||
//TODO: LaunchTask on the Mesos cluster and get container
|
||||
|
||||
|
|
@ -68,11 +70,11 @@ func (s *MesosCluster) Image(IdOrName string) *cluster.Image {
|
|||
}
|
||||
|
||||
func (s *MesosCluster) Containers() []*cluster.Container {
|
||||
return s.nodes.Containers()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *MesosCluster) Container(IdOrName string) *cluster.Container {
|
||||
return s.nodes.Container(IdOrName)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *MesosCluster) Info() [][2]string {
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
package cluster
|
||||
package swarm
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"sync"
|
||||
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/docker/swarm/cluster"
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
@ -15,17 +16,17 @@ var (
|
|||
type Nodes struct {
|
||||
sync.RWMutex
|
||||
|
||||
eventHandlers []EventHandler
|
||||
nodes map[string]*Node
|
||||
eventHandlers []cluster.EventHandler
|
||||
nodes map[string]*cluster.Node
|
||||
}
|
||||
|
||||
func NewNodes() *Nodes {
|
||||
return &Nodes{
|
||||
nodes: make(map[string]*Node),
|
||||
nodes: make(map[string]*cluster.Node),
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Nodes) Handle(e *Event) error {
|
||||
func (c *Nodes) Handle(e *cluster.Event) error {
|
||||
for _, eventHandler := range c.eventHandlers {
|
||||
if err := eventHandler.Handle(e); err != nil {
|
||||
log.Error(err)
|
||||
|
|
@ -36,7 +37,7 @@ func (c *Nodes) Handle(e *Event) error {
|
|||
|
||||
// Register a node within the cluster. The node must have been already
|
||||
// initialized.
|
||||
func (c *Nodes) Add(n *Node) error {
|
||||
func (c *Nodes) Add(n *cluster.Node) error {
|
||||
if !n.IsConnected() {
|
||||
return ErrNodeNotConnected
|
||||
}
|
||||
|
|
@ -56,11 +57,11 @@ func (c *Nodes) Add(n *Node) error {
|
|||
}
|
||||
|
||||
// Containers returns all the images in the cluster.
|
||||
func (c *Nodes) Images() []*Image {
|
||||
func (c *Nodes) Images() []*cluster.Image {
|
||||
c.Lock()
|
||||
defer c.Unlock()
|
||||
|
||||
out := []*Image{}
|
||||
out := []*cluster.Image{}
|
||||
for _, n := range c.nodes {
|
||||
out = append(out, n.Images()...)
|
||||
}
|
||||
|
|
@ -69,7 +70,7 @@ func (c *Nodes) Images() []*Image {
|
|||
}
|
||||
|
||||
// Image returns an image with IdOrName in the cluster
|
||||
func (c *Nodes) Image(IdOrName string) *Image {
|
||||
func (c *Nodes) Image(IdOrName string) *cluster.Image {
|
||||
// Abort immediately if the name is empty.
|
||||
if len(IdOrName) == 0 {
|
||||
return nil
|
||||
|
|
@ -87,11 +88,11 @@ func (c *Nodes) Image(IdOrName string) *Image {
|
|||
}
|
||||
|
||||
// Containers returns all the containers in the cluster.
|
||||
func (c *Nodes) Containers() []*Container {
|
||||
func (c *Nodes) Containers() []*cluster.Container {
|
||||
c.Lock()
|
||||
defer c.Unlock()
|
||||
|
||||
out := []*Container{}
|
||||
out := []*cluster.Container{}
|
||||
for _, n := range c.nodes {
|
||||
out = append(out, n.Containers()...)
|
||||
}
|
||||
|
|
@ -100,7 +101,7 @@ func (c *Nodes) Containers() []*Container {
|
|||
}
|
||||
|
||||
// Container returns the container with IdOrName in the cluster
|
||||
func (c *Nodes) Container(IdOrName string) *Container {
|
||||
func (c *Nodes) Container(IdOrName string) *cluster.Container {
|
||||
// Abort immediately if the name is empty.
|
||||
if len(IdOrName) == 0 {
|
||||
return nil
|
||||
|
|
@ -118,8 +119,8 @@ func (c *Nodes) Container(IdOrName string) *Container {
|
|||
}
|
||||
|
||||
// Nodes returns the list of nodes in the cluster
|
||||
func (c *Nodes) List() []*Node {
|
||||
nodes := []*Node{}
|
||||
func (c *Nodes) List() []*cluster.Node {
|
||||
nodes := []*cluster.Node{}
|
||||
c.RLock()
|
||||
for _, node := range c.nodes {
|
||||
nodes = append(nodes, node)
|
||||
|
|
@ -128,7 +129,7 @@ func (c *Nodes) List() []*Node {
|
|||
return nodes
|
||||
}
|
||||
|
||||
func (c *Nodes) Get(addr string) *Node {
|
||||
func (c *Nodes) Get(addr string) *cluster.Node {
|
||||
for _, node := range c.nodes {
|
||||
if node.Addr == addr {
|
||||
return node
|
||||
|
|
@ -137,7 +138,7 @@ func (c *Nodes) Get(addr string) *Node {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (c *Nodes) Events(h EventHandler) error {
|
||||
func (c *Nodes) Events(h cluster.EventHandler) error {
|
||||
c.eventHandlers = append(c.eventHandlers, h)
|
||||
return nil
|
||||
}
|
||||
|
|
@ -1,34 +1,22 @@
|
|||
package cluster
|
||||
package swarm
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/docker/swarm/cluster"
|
||||
"github.com/samalba/dockerclient"
|
||||
"github.com/samalba/dockerclient/mockclient"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
||||
func createNode(t *testing.T, ID string, containers ...dockerclient.Container) *Node {
|
||||
node := NewNode(ID, 0)
|
||||
func createNode(t *testing.T, ID string, containers ...dockerclient.Container) *cluster.Node {
|
||||
node := cluster.NewNode(ID, 0)
|
||||
node.Name = ID
|
||||
|
||||
assert.False(t, node.IsConnected())
|
||||
|
||||
client := mockclient.NewMockClient()
|
||||
client.On("Info").Return(mockInfo, nil)
|
||||
client.On("ListContainers", true, false, "").Return(containers, nil)
|
||||
client.On("ListImages").Return([]*dockerclient.Image{}, nil)
|
||||
client.On("InspectContainer", mock.Anything).Return(
|
||||
&dockerclient.ContainerInfo{
|
||||
Config: &dockerclient.ContainerConfig{CpuShares: 100},
|
||||
}, nil)
|
||||
client.On("StartMonitorEvents", mock.Anything, mock.Anything, mock.Anything).Return()
|
||||
|
||||
assert.NoError(t, node.connectClient(client))
|
||||
assert.True(t, node.IsConnected())
|
||||
node.ID = ID
|
||||
|
||||
for _, container := range containers {
|
||||
node.AddContainer(&cluster.Container{Container: container, Node: node})
|
||||
}
|
||||
|
||||
return node
|
||||
}
|
||||
|
||||
|
|
@ -38,15 +26,18 @@ func TestAdd(t *testing.T) {
|
|||
assert.Nil(t, c.Get("test"))
|
||||
assert.Nil(t, c.Get("test2"))
|
||||
|
||||
assert.NoError(t, c.Add(createNode(t, "test")))
|
||||
n := createNode(t, "test")
|
||||
c.nodes[n.ID] = n
|
||||
assert.Equal(t, len(c.List()), 1)
|
||||
assert.NotNil(t, c.Get("test"))
|
||||
|
||||
assert.Error(t, c.Add(createNode(t, "test")))
|
||||
n = createNode(t, "test")
|
||||
c.nodes[n.ID] = n
|
||||
assert.Equal(t, len(c.List()), 1)
|
||||
assert.NotNil(t, c.Get("test"))
|
||||
|
||||
assert.NoError(t, c.Add(createNode(t, "test2")))
|
||||
n = createNode(t, "test2")
|
||||
c.nodes[n.ID] = n
|
||||
assert.Equal(t, len(c.List()), 2)
|
||||
assert.NotNil(t, c.Get("test2"))
|
||||
}
|
||||
|
|
@ -57,8 +48,9 @@ func TestContainerLookup(t *testing.T) {
|
|||
Id: "container-id",
|
||||
Names: []string{"/container-name1", "/container-name2"},
|
||||
}
|
||||
node := createNode(t, "test-node", container)
|
||||
assert.NoError(t, c.Add(node))
|
||||
|
||||
n := createNode(t, "test-node", container)
|
||||
c.nodes[n.ID] = n
|
||||
|
||||
// Invalid lookup
|
||||
assert.Nil(t, c.Container("invalid-id"))
|
||||
|
|
@ -16,7 +16,7 @@ import (
|
|||
type SwarmCluster struct {
|
||||
sync.RWMutex
|
||||
|
||||
nodes *cluster.Nodes
|
||||
nodes *Nodes
|
||||
scheduler *scheduler.Scheduler
|
||||
options *cluster.Options
|
||||
store *state.Store
|
||||
|
|
@ -26,7 +26,7 @@ func NewCluster(scheduler *scheduler.Scheduler, store *state.Store, options *clu
|
|||
log.WithFields(log.Fields{"name": "swarm"}).Debug("Initializing cluster")
|
||||
|
||||
cluster := &SwarmCluster{
|
||||
nodes: cluster.NewNodes(),
|
||||
nodes: NewNodes(),
|
||||
scheduler: scheduler,
|
||||
options: options,
|
||||
store: store,
|
||||
|
|
|
|||
Loading…
Reference in New Issue