mirror of https://github.com/docker/docs.git
41 lines
712 B
Go
41 lines
712 B
Go
package libcluster
|
|
|
|
import (
|
|
"errors"
|
|
"sync"
|
|
)
|
|
|
|
var (
|
|
ErrNodeNotConnected = errors.New("node is not connected to docker's REST API")
|
|
ErrNodeAlreadyRegistered = errors.New("node was already added to the cluster")
|
|
)
|
|
|
|
type Cluster struct {
|
|
mux sync.Mutex
|
|
nodes map[string]*Node
|
|
}
|
|
|
|
func NewCluster() *Cluster {
|
|
return &Cluster{
|
|
nodes: make(map[string]*Node),
|
|
}
|
|
}
|
|
|
|
// Register a node within the cluster. The node must have been already
|
|
// initialized.
|
|
func (c *Cluster) AddNode(n *Node) error {
|
|
if !n.IsConnected() {
|
|
return ErrNodeNotConnected
|
|
}
|
|
|
|
c.mux.Lock()
|
|
defer c.mux.Unlock()
|
|
|
|
if _, exists := c.nodes[n.ID]; exists {
|
|
return ErrNodeAlreadyRegistered
|
|
}
|
|
|
|
c.nodes[n.ID] = n
|
|
return nil
|
|
}
|