|
@@ -1157,117 +1157,6 @@ func (c *Cluster) ServiceLogs(ctx context.Context, input string, config *backend
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-// GetNodes returns a list of all nodes known to a cluster.
|
|
|
|
-func (c *Cluster) GetNodes(options apitypes.NodeListOptions) ([]types.Node, error) {
|
|
|
|
- c.mu.RLock()
|
|
|
|
- defer c.mu.RUnlock()
|
|
|
|
-
|
|
|
|
- state := c.currentNodeState()
|
|
|
|
- if !state.IsActiveManager() {
|
|
|
|
- return nil, c.errNoManager(state)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- filters, err := newListNodesFilters(options.Filters)
|
|
|
|
- if err != nil {
|
|
|
|
- return nil, err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- ctx, cancel := c.getRequestContext()
|
|
|
|
- defer cancel()
|
|
|
|
-
|
|
|
|
- r, err := state.controlClient.ListNodes(
|
|
|
|
- ctx,
|
|
|
|
- &swarmapi.ListNodesRequest{Filters: filters})
|
|
|
|
- if err != nil {
|
|
|
|
- return nil, err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- nodes := []types.Node{}
|
|
|
|
-
|
|
|
|
- for _, node := range r.Nodes {
|
|
|
|
- nodes = append(nodes, convert.NodeFromGRPC(*node))
|
|
|
|
- }
|
|
|
|
- return nodes, nil
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// GetNode returns a node based on an ID.
|
|
|
|
-func (c *Cluster) GetNode(input string) (types.Node, error) {
|
|
|
|
- c.mu.RLock()
|
|
|
|
- defer c.mu.RUnlock()
|
|
|
|
-
|
|
|
|
- state := c.currentNodeState()
|
|
|
|
- if !state.IsActiveManager() {
|
|
|
|
- return types.Node{}, c.errNoManager(state)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- ctx, cancel := c.getRequestContext()
|
|
|
|
- defer cancel()
|
|
|
|
-
|
|
|
|
- node, err := getNode(ctx, state.controlClient, input)
|
|
|
|
- if err != nil {
|
|
|
|
- return types.Node{}, err
|
|
|
|
- }
|
|
|
|
- return convert.NodeFromGRPC(*node), nil
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// UpdateNode updates existing nodes properties.
|
|
|
|
-func (c *Cluster) UpdateNode(input string, version uint64, spec types.NodeSpec) error {
|
|
|
|
- c.mu.RLock()
|
|
|
|
- defer c.mu.RUnlock()
|
|
|
|
-
|
|
|
|
- state := c.currentNodeState()
|
|
|
|
- if !state.IsActiveManager() {
|
|
|
|
- return c.errNoManager(state)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- nodeSpec, err := convert.NodeSpecToGRPC(spec)
|
|
|
|
- if err != nil {
|
|
|
|
- return apierrors.NewBadRequestError(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- ctx, cancel := c.getRequestContext()
|
|
|
|
- defer cancel()
|
|
|
|
-
|
|
|
|
- currentNode, err := getNode(ctx, state.controlClient, input)
|
|
|
|
- if err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- _, err = state.controlClient.UpdateNode(
|
|
|
|
- ctx,
|
|
|
|
- &swarmapi.UpdateNodeRequest{
|
|
|
|
- NodeID: currentNode.ID,
|
|
|
|
- Spec: &nodeSpec,
|
|
|
|
- NodeVersion: &swarmapi.Version{
|
|
|
|
- Index: version,
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
- )
|
|
|
|
- return err
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// RemoveNode removes a node from a cluster
|
|
|
|
-func (c *Cluster) RemoveNode(input string, force bool) error {
|
|
|
|
- c.mu.RLock()
|
|
|
|
- defer c.mu.RUnlock()
|
|
|
|
-
|
|
|
|
- state := c.currentNodeState()
|
|
|
|
- if !state.IsActiveManager() {
|
|
|
|
- return c.errNoManager(state)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- ctx, cancel := c.getRequestContext()
|
|
|
|
- defer cancel()
|
|
|
|
-
|
|
|
|
- node, err := getNode(ctx, state.controlClient, input)
|
|
|
|
- if err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- _, err = state.controlClient.RemoveNode(ctx, &swarmapi.RemoveNodeRequest{NodeID: node.ID, Force: force})
|
|
|
|
- return err
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
// GetTasks returns a list of tasks matching the filter options.
|
|
// GetTasks returns a list of tasks matching the filter options.
|
|
func (c *Cluster) GetTasks(options apitypes.TaskListOptions) ([]types.Task, error) {
|
|
func (c *Cluster) GetTasks(options apitypes.TaskListOptions) ([]types.Task, error) {
|
|
c.mu.RLock()
|
|
c.mu.RLock()
|