From 7ceea4148ae1cf7d1e5c1d7ceca514d5e873df45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Gronowski?= Date: Wed, 22 Oct 2025 12:01:37 +0200 Subject: [PATCH] client/node: Wrap options and output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Paweł Gronowski --- client/client_interfaces.go | 8 ++++---- client/node_inspect.go | 17 ++++++++++------ client/node_inspect_test.go | 12 +++++------ client/node_list.go | 10 +++++++--- client/node_list_test.go | 4 ++-- client/node_remove.go | 9 ++++++--- client/node_remove_test.go | 8 ++++---- client/node_update.go | 15 +++++++------- client/node_update_test.go | 20 +++++++++++++++---- client/swarm_node_inspect_opts.go | 5 +++++ client/swarm_node_update_opts.go | 9 +++++++++ integration-cli/daemon/daemon_swarm.go | 4 ++-- integration/internal/swarm/states.go | 4 ++-- integration/network/inspect_test.go | 4 ++-- internal/testutil/daemon/node.go | 19 ++++++++++-------- .../moby/moby/client/client_interfaces.go | 8 ++++---- .../moby/moby/client/node_inspect.go | 17 ++++++++++------ .../github.com/moby/moby/client/node_list.go | 10 +++++++--- .../moby/moby/client/node_remove.go | 9 ++++++--- .../moby/moby/client/node_update.go | 15 +++++++------- .../moby/client/swarm_node_inspect_opts.go | 5 +++++ .../moby/client/swarm_node_update_opts.go | 9 +++++++++ 22 files changed, 145 insertions(+), 76 deletions(-) create mode 100644 client/swarm_node_inspect_opts.go create mode 100644 client/swarm_node_update_opts.go create mode 100644 vendor/github.com/moby/moby/client/swarm_node_inspect_opts.go create mode 100644 vendor/github.com/moby/moby/client/swarm_node_update_opts.go diff --git a/client/client_interfaces.go b/client/client_interfaces.go index f7bd8b62ce..268c106236 100644 --- a/client/client_interfaces.go +++ b/client/client_interfaces.go @@ -137,10 +137,10 @@ type NetworkAPIClient interface { // NodeAPIClient defines API client methods for the nodes type NodeAPIClient interface { - NodeInspectWithRaw(ctx context.Context, nodeID string) (swarm.Node, []byte, error) - NodeList(ctx context.Context, options NodeListOptions) ([]swarm.Node, error) - NodeRemove(ctx context.Context, nodeID string, options NodeRemoveOptions) error - NodeUpdate(ctx context.Context, nodeID string, version swarm.Version, node swarm.NodeSpec) error + NodeInspect(ctx context.Context, nodeID string, options NodeInspectOptions) (NodeInspectResult, error) + NodeList(ctx context.Context, options NodeListOptions) (NodeListResult, error) + NodeRemove(ctx context.Context, nodeID string, options NodeRemoveOptions) (NodeRemoveResult, error) + NodeUpdate(ctx context.Context, nodeID string, options NodeUpdateOptions) (NodeUpdateResult, error) } // PluginAPIClient defines API client methods for the plugins diff --git a/client/node_inspect.go b/client/node_inspect.go index 816eb19f66..b6ba94fb6e 100644 --- a/client/node_inspect.go +++ b/client/node_inspect.go @@ -9,25 +9,30 @@ import ( "github.com/moby/moby/api/types/swarm" ) -// NodeInspectWithRaw returns the node information. -func (cli *Client) NodeInspectWithRaw(ctx context.Context, nodeID string) (swarm.Node, []byte, error) { +type NodeInspectResult struct { + Node swarm.Node + Raw []byte +} + +// NodeInspect returns the node information. +func (cli *Client) NodeInspect(ctx context.Context, nodeID string, options NodeInspectOptions) (NodeInspectResult, error) { nodeID, err := trimID("node", nodeID) if err != nil { - return swarm.Node{}, nil, err + return NodeInspectResult{}, err } resp, err := cli.get(ctx, "/nodes/"+nodeID, nil, nil) defer ensureReaderClosed(resp) if err != nil { - return swarm.Node{}, nil, err + return NodeInspectResult{}, err } body, err := io.ReadAll(resp.Body) if err != nil { - return swarm.Node{}, nil, err + return NodeInspectResult{}, err } var response swarm.Node rdr := bytes.NewReader(body) err = json.NewDecoder(rdr).Decode(&response) - return response, body, err + return NodeInspectResult{Node: response, Raw: body}, err } diff --git a/client/node_inspect_test.go b/client/node_inspect_test.go index abd9be4574..d98e375328 100644 --- a/client/node_inspect_test.go +++ b/client/node_inspect_test.go @@ -19,7 +19,7 @@ func TestNodeInspectError(t *testing.T) { client, err := NewClientWithOpts(WithMockClient(errorMock(http.StatusInternalServerError, "Server error"))) assert.NilError(t, err) - _, _, err = client.NodeInspectWithRaw(context.Background(), "nothing") + _, err = client.NodeInspect(context.Background(), "nothing", NodeInspectOptions{}) assert.Check(t, is.ErrorType(err, cerrdefs.IsInternal)) } @@ -27,7 +27,7 @@ func TestNodeInspectNodeNotFound(t *testing.T) { client, err := NewClientWithOpts(WithMockClient(errorMock(http.StatusNotFound, "Server error"))) assert.NilError(t, err) - _, _, err = client.NodeInspectWithRaw(context.Background(), "unknown") + _, err = client.NodeInspect(context.Background(), "unknown", NodeInspectOptions{}) assert.Check(t, is.ErrorType(err, cerrdefs.IsNotFound)) } @@ -36,11 +36,11 @@ func TestNodeInspectWithEmptyID(t *testing.T) { return nil, errors.New("should not make request") })) assert.NilError(t, err) - _, _, err = client.NodeInspectWithRaw(context.Background(), "") + _, err = client.NodeInspect(context.Background(), "", NodeInspectOptions{}) assert.Check(t, is.ErrorType(err, cerrdefs.IsInvalidArgument)) assert.Check(t, is.ErrorContains(err, "value is empty")) - _, _, err = client.NodeInspectWithRaw(context.Background(), " ") + _, err = client.NodeInspect(context.Background(), " ", NodeInspectOptions{}) assert.Check(t, is.ErrorType(err, cerrdefs.IsInvalidArgument)) assert.Check(t, is.ErrorContains(err, "value is empty")) } @@ -64,7 +64,7 @@ func TestNodeInspect(t *testing.T) { })) assert.NilError(t, err) - nodeInspect, _, err := client.NodeInspectWithRaw(context.Background(), "node_id") + result, err := client.NodeInspect(context.Background(), "node_id", NodeInspectOptions{}) assert.NilError(t, err) - assert.Check(t, is.Equal(nodeInspect.ID, "node_id")) + assert.Check(t, is.Equal(result.Node.ID, "node_id")) } diff --git a/client/node_list.go b/client/node_list.go index 74224305a9..6952d5fe2b 100644 --- a/client/node_list.go +++ b/client/node_list.go @@ -8,17 +8,21 @@ import ( "github.com/moby/moby/api/types/swarm" ) +type NodeListResult struct { + Items []swarm.Node +} + // NodeList returns the list of nodes. -func (cli *Client) NodeList(ctx context.Context, options NodeListOptions) ([]swarm.Node, error) { +func (cli *Client) NodeList(ctx context.Context, options NodeListOptions) (NodeListResult, error) { query := url.Values{} options.Filters.updateURLValues(query) resp, err := cli.get(ctx, "/nodes", query, nil) defer ensureReaderClosed(resp) if err != nil { - return nil, err + return NodeListResult{}, err } var nodes []swarm.Node err = json.NewDecoder(resp.Body).Decode(&nodes) - return nodes, err + return NodeListResult{Items: nodes}, err } diff --git a/client/node_list_test.go b/client/node_list_test.go index 01336d5ac5..dc829623d2 100644 --- a/client/node_list_test.go +++ b/client/node_list_test.go @@ -76,8 +76,8 @@ func TestNodeList(t *testing.T) { })) assert.NilError(t, err) - nodes, err := client.NodeList(context.Background(), listCase.options) + result, err := client.NodeList(context.Background(), listCase.options) assert.NilError(t, err) - assert.Check(t, is.Len(nodes, 2)) + assert.Check(t, is.Len(result.Items, 2)) } } diff --git a/client/node_remove.go b/client/node_remove.go index b630ecffd4..d70aac88cc 100644 --- a/client/node_remove.go +++ b/client/node_remove.go @@ -5,11 +5,14 @@ import ( "net/url" ) +type NodeRemoveResult struct { +} + // NodeRemove removes a Node. -func (cli *Client) NodeRemove(ctx context.Context, nodeID string, options NodeRemoveOptions) error { +func (cli *Client) NodeRemove(ctx context.Context, nodeID string, options NodeRemoveOptions) (NodeRemoveResult, error) { nodeID, err := trimID("node", nodeID) if err != nil { - return err + return NodeRemoveResult{}, err } query := url.Values{} @@ -19,5 +22,5 @@ func (cli *Client) NodeRemove(ctx context.Context, nodeID string, options NodeRe resp, err := cli.delete(ctx, "/nodes/"+nodeID, query, nil) defer ensureReaderClosed(resp) - return err + return NodeRemoveResult{}, err } diff --git a/client/node_remove_test.go b/client/node_remove_test.go index 475d7b55b2..c4f55bef34 100644 --- a/client/node_remove_test.go +++ b/client/node_remove_test.go @@ -17,14 +17,14 @@ func TestNodeRemoveError(t *testing.T) { client, err := NewClientWithOpts(WithMockClient(errorMock(http.StatusInternalServerError, "Server error"))) assert.NilError(t, err) - err = client.NodeRemove(context.Background(), "node_id", NodeRemoveOptions{Force: false}) + _, err = client.NodeRemove(context.Background(), "node_id", NodeRemoveOptions{Force: false}) assert.Check(t, is.ErrorType(err, cerrdefs.IsInternal)) - err = client.NodeRemove(context.Background(), "", NodeRemoveOptions{Force: false}) + _, err = client.NodeRemove(context.Background(), "", NodeRemoveOptions{Force: false}) assert.Check(t, is.ErrorType(err, cerrdefs.IsInvalidArgument)) assert.Check(t, is.ErrorContains(err, "value is empty")) - err = client.NodeRemove(context.Background(), " ", NodeRemoveOptions{Force: false}) + _, err = client.NodeRemove(context.Background(), " ", NodeRemoveOptions{Force: false}) assert.Check(t, is.ErrorType(err, cerrdefs.IsInvalidArgument)) assert.Check(t, is.ErrorContains(err, "value is empty")) } @@ -62,7 +62,7 @@ func TestNodeRemove(t *testing.T) { })) assert.NilError(t, err) - err = client.NodeRemove(context.Background(), "node_id", NodeRemoveOptions{Force: removeCase.force}) + _, err = client.NodeRemove(context.Background(), "node_id", NodeRemoveOptions{Force: removeCase.force}) assert.NilError(t, err) } } diff --git a/client/node_update.go b/client/node_update.go index 6dfa11b3a6..54c26811c8 100644 --- a/client/node_update.go +++ b/client/node_update.go @@ -3,20 +3,21 @@ package client import ( "context" "net/url" - - "github.com/moby/moby/api/types/swarm" ) +type NodeUpdateResult struct { +} + // NodeUpdate updates a Node. -func (cli *Client) NodeUpdate(ctx context.Context, nodeID string, version swarm.Version, node swarm.NodeSpec) error { +func (cli *Client) NodeUpdate(ctx context.Context, nodeID string, options NodeUpdateOptions) (NodeUpdateResult, error) { nodeID, err := trimID("node", nodeID) if err != nil { - return err + return NodeUpdateResult{}, err } query := url.Values{} - query.Set("version", version.String()) - resp, err := cli.post(ctx, "/nodes/"+nodeID+"/update", query, node, nil) + query.Set("version", options.Version.String()) + resp, err := cli.post(ctx, "/nodes/"+nodeID+"/update", query, options.Node, nil) defer ensureReaderClosed(resp) - return err + return NodeUpdateResult{}, err } diff --git a/client/node_update_test.go b/client/node_update_test.go index 9879c2bf64..52a4c74c68 100644 --- a/client/node_update_test.go +++ b/client/node_update_test.go @@ -17,14 +17,23 @@ func TestNodeUpdateError(t *testing.T) { client, err := NewClientWithOpts(WithMockClient(errorMock(http.StatusInternalServerError, "Server error"))) assert.NilError(t, err) - err = client.NodeUpdate(context.Background(), "node_id", swarm.Version{}, swarm.NodeSpec{}) + _, err = client.NodeUpdate(context.Background(), "node_id", NodeUpdateOptions{ + Version: swarm.Version{}, + Node: swarm.NodeSpec{}, + }) assert.Check(t, is.ErrorType(err, cerrdefs.IsInternal)) - err = client.NodeUpdate(context.Background(), "", swarm.Version{}, swarm.NodeSpec{}) + _, err = client.NodeUpdate(context.Background(), "", NodeUpdateOptions{ + Version: swarm.Version{}, + Node: swarm.NodeSpec{}, + }) assert.Check(t, is.ErrorType(err, cerrdefs.IsInvalidArgument)) assert.Check(t, is.ErrorContains(err, "value is empty")) - err = client.NodeUpdate(context.Background(), " ", swarm.Version{}, swarm.NodeSpec{}) + _, err = client.NodeUpdate(context.Background(), " ", NodeUpdateOptions{ + Version: swarm.Version{}, + Node: swarm.NodeSpec{}, + }) assert.Check(t, is.ErrorType(err, cerrdefs.IsInvalidArgument)) assert.Check(t, is.ErrorContains(err, "value is empty")) } @@ -43,6 +52,9 @@ func TestNodeUpdate(t *testing.T) { })) assert.NilError(t, err) - err = client.NodeUpdate(context.Background(), "node_id", swarm.Version{}, swarm.NodeSpec{}) + _, err = client.NodeUpdate(context.Background(), "node_id", NodeUpdateOptions{ + Version: swarm.Version{}, + Node: swarm.NodeSpec{}, + }) assert.NilError(t, err) } diff --git a/client/swarm_node_inspect_opts.go b/client/swarm_node_inspect_opts.go new file mode 100644 index 0000000000..197e495fb7 --- /dev/null +++ b/client/swarm_node_inspect_opts.go @@ -0,0 +1,5 @@ +package client + +// NodeInspectOptions holds parameters to inspect nodes with. +type NodeInspectOptions struct { +} diff --git a/client/swarm_node_update_opts.go b/client/swarm_node_update_opts.go new file mode 100644 index 0000000000..738b9f871f --- /dev/null +++ b/client/swarm_node_update_opts.go @@ -0,0 +1,9 @@ +package client + +import "github.com/moby/moby/api/types/swarm" + +// NodeUpdateOptions holds parameters to update nodes with. +type NodeUpdateOptions struct { + Version swarm.Version + Node swarm.NodeSpec +} diff --git a/integration-cli/daemon/daemon_swarm.go b/integration-cli/daemon/daemon_swarm.go index abf00f19e9..e278c7afd6 100644 --- a/integration-cli/daemon/daemon_swarm.go +++ b/integration-cli/daemon/daemon_swarm.go @@ -178,12 +178,12 @@ func (d *Daemon) CheckLeader(ctx context.Context) func(t *testing.T) (any, strin errList := "could not get node list" - ls, err := cli.NodeList(ctx, client.NodeListOptions{}) + result, err := cli.NodeList(ctx, client.NodeListOptions{}) if err != nil { return err, errList } - for _, node := range ls { + for _, node := range result.Items { if node.ManagerStatus != nil && node.ManagerStatus.Leader { return nil, "" } diff --git a/integration/internal/swarm/states.go b/integration/internal/swarm/states.go index ce8ebfb928..8650028d24 100644 --- a/integration/internal/swarm/states.go +++ b/integration/internal/swarm/states.go @@ -159,13 +159,13 @@ func JobComplete(ctx context.Context, apiClient client.ServiceAPIClient, service func HasLeader(ctx context.Context, apiClient client.NodeAPIClient) func(log poll.LogT) poll.Result { return func(log poll.LogT) poll.Result { - nodes, err := apiClient.NodeList(ctx, client.NodeListOptions{ + result, err := apiClient.NodeList(ctx, client.NodeListOptions{ Filters: make(client.Filters).Add("role", "manager"), }) if err != nil { return poll.Error(err) } - for _, node := range nodes { + for _, node := range result.Items { if node.ManagerStatus != nil && node.ManagerStatus.Leader { return poll.Success() } diff --git a/integration/network/inspect_test.go b/integration/network/inspect_test.go index 1b880c89ef..67cdec6d64 100644 --- a/integration/network/inspect_test.go +++ b/integration/network/inspect_test.go @@ -165,11 +165,11 @@ func TestInspectNetwork(t *testing.T) { t.Run("BeforeLeaderChange", checkNetworkInspect) leaderID := func() string { - ls, err := c1.NodeList(ctx, client.NodeListOptions{ + result, err := c1.NodeList(ctx, client.NodeListOptions{ Filters: make(client.Filters).Add("role", "manager"), }) assert.NilError(t, err) - for _, node := range ls { + for _, node := range result.Items { if node.ManagerStatus != nil && node.ManagerStatus.Leader { return node.ID } diff --git a/internal/testutil/daemon/node.go b/internal/testutil/daemon/node.go index 30354c667b..f631c53710 100644 --- a/internal/testutil/daemon/node.go +++ b/internal/testutil/daemon/node.go @@ -20,7 +20,7 @@ func (d *Daemon) GetNode(ctx context.Context, t testing.TB, id string, errCheck cli := d.NewClientT(t) defer cli.Close() - node, _, err := cli.NodeInspectWithRaw(ctx, id) + result, err := cli.NodeInspect(ctx, id, client.NodeInspectOptions{}) if err != nil { for _, f := range errCheck { if f(err) { @@ -28,9 +28,9 @@ func (d *Daemon) GetNode(ctx context.Context, t testing.TB, id string, errCheck } } } - assert.NilError(t, err, "[%s] (*Daemon).GetNode: NodeInspectWithRaw(%q) failed", d.id, id) - assert.Check(t, node.ID == id) - return &node + assert.NilError(t, err, "[%s] (*Daemon).GetNode: NodeInspect(%q) failed", d.id, id) + assert.Check(t, result.Node.ID == id) + return &result.Node } // RemoveNode removes the specified node @@ -42,7 +42,7 @@ func (d *Daemon) RemoveNode(ctx context.Context, t testing.TB, id string, force options := client.NodeRemoveOptions{ Force: force, } - err := cli.NodeRemove(ctx, id, options) + _, err := cli.NodeRemove(ctx, id, options) assert.NilError(t, err) } @@ -58,7 +58,10 @@ func (d *Daemon) UpdateNode(ctx context.Context, t testing.TB, id string, f ...N fn(node) } - err := cli.NodeUpdate(ctx, node.ID, node.Version, node.Spec) + _, err := cli.NodeUpdate(ctx, node.ID, client.NodeUpdateOptions{ + Version: node.Version, + Node: node.Spec, + }) if i < 10 && err != nil && strings.Contains(err.Error(), "update out of sequence") { time.Sleep(100 * time.Millisecond) continue @@ -74,8 +77,8 @@ func (d *Daemon) ListNodes(ctx context.Context, t testing.TB) []swarm.Node { cli := d.NewClientT(t) defer cli.Close() - nodes, err := cli.NodeList(ctx, client.NodeListOptions{}) + result, err := cli.NodeList(ctx, client.NodeListOptions{}) assert.NilError(t, err) - return nodes + return result.Items } diff --git a/vendor/github.com/moby/moby/client/client_interfaces.go b/vendor/github.com/moby/moby/client/client_interfaces.go index f7bd8b62ce..268c106236 100644 --- a/vendor/github.com/moby/moby/client/client_interfaces.go +++ b/vendor/github.com/moby/moby/client/client_interfaces.go @@ -137,10 +137,10 @@ type NetworkAPIClient interface { // NodeAPIClient defines API client methods for the nodes type NodeAPIClient interface { - NodeInspectWithRaw(ctx context.Context, nodeID string) (swarm.Node, []byte, error) - NodeList(ctx context.Context, options NodeListOptions) ([]swarm.Node, error) - NodeRemove(ctx context.Context, nodeID string, options NodeRemoveOptions) error - NodeUpdate(ctx context.Context, nodeID string, version swarm.Version, node swarm.NodeSpec) error + NodeInspect(ctx context.Context, nodeID string, options NodeInspectOptions) (NodeInspectResult, error) + NodeList(ctx context.Context, options NodeListOptions) (NodeListResult, error) + NodeRemove(ctx context.Context, nodeID string, options NodeRemoveOptions) (NodeRemoveResult, error) + NodeUpdate(ctx context.Context, nodeID string, options NodeUpdateOptions) (NodeUpdateResult, error) } // PluginAPIClient defines API client methods for the plugins diff --git a/vendor/github.com/moby/moby/client/node_inspect.go b/vendor/github.com/moby/moby/client/node_inspect.go index 816eb19f66..b6ba94fb6e 100644 --- a/vendor/github.com/moby/moby/client/node_inspect.go +++ b/vendor/github.com/moby/moby/client/node_inspect.go @@ -9,25 +9,30 @@ import ( "github.com/moby/moby/api/types/swarm" ) -// NodeInspectWithRaw returns the node information. -func (cli *Client) NodeInspectWithRaw(ctx context.Context, nodeID string) (swarm.Node, []byte, error) { +type NodeInspectResult struct { + Node swarm.Node + Raw []byte +} + +// NodeInspect returns the node information. +func (cli *Client) NodeInspect(ctx context.Context, nodeID string, options NodeInspectOptions) (NodeInspectResult, error) { nodeID, err := trimID("node", nodeID) if err != nil { - return swarm.Node{}, nil, err + return NodeInspectResult{}, err } resp, err := cli.get(ctx, "/nodes/"+nodeID, nil, nil) defer ensureReaderClosed(resp) if err != nil { - return swarm.Node{}, nil, err + return NodeInspectResult{}, err } body, err := io.ReadAll(resp.Body) if err != nil { - return swarm.Node{}, nil, err + return NodeInspectResult{}, err } var response swarm.Node rdr := bytes.NewReader(body) err = json.NewDecoder(rdr).Decode(&response) - return response, body, err + return NodeInspectResult{Node: response, Raw: body}, err } diff --git a/vendor/github.com/moby/moby/client/node_list.go b/vendor/github.com/moby/moby/client/node_list.go index 74224305a9..6952d5fe2b 100644 --- a/vendor/github.com/moby/moby/client/node_list.go +++ b/vendor/github.com/moby/moby/client/node_list.go @@ -8,17 +8,21 @@ import ( "github.com/moby/moby/api/types/swarm" ) +type NodeListResult struct { + Items []swarm.Node +} + // NodeList returns the list of nodes. -func (cli *Client) NodeList(ctx context.Context, options NodeListOptions) ([]swarm.Node, error) { +func (cli *Client) NodeList(ctx context.Context, options NodeListOptions) (NodeListResult, error) { query := url.Values{} options.Filters.updateURLValues(query) resp, err := cli.get(ctx, "/nodes", query, nil) defer ensureReaderClosed(resp) if err != nil { - return nil, err + return NodeListResult{}, err } var nodes []swarm.Node err = json.NewDecoder(resp.Body).Decode(&nodes) - return nodes, err + return NodeListResult{Items: nodes}, err } diff --git a/vendor/github.com/moby/moby/client/node_remove.go b/vendor/github.com/moby/moby/client/node_remove.go index b630ecffd4..d70aac88cc 100644 --- a/vendor/github.com/moby/moby/client/node_remove.go +++ b/vendor/github.com/moby/moby/client/node_remove.go @@ -5,11 +5,14 @@ import ( "net/url" ) +type NodeRemoveResult struct { +} + // NodeRemove removes a Node. -func (cli *Client) NodeRemove(ctx context.Context, nodeID string, options NodeRemoveOptions) error { +func (cli *Client) NodeRemove(ctx context.Context, nodeID string, options NodeRemoveOptions) (NodeRemoveResult, error) { nodeID, err := trimID("node", nodeID) if err != nil { - return err + return NodeRemoveResult{}, err } query := url.Values{} @@ -19,5 +22,5 @@ func (cli *Client) NodeRemove(ctx context.Context, nodeID string, options NodeRe resp, err := cli.delete(ctx, "/nodes/"+nodeID, query, nil) defer ensureReaderClosed(resp) - return err + return NodeRemoveResult{}, err } diff --git a/vendor/github.com/moby/moby/client/node_update.go b/vendor/github.com/moby/moby/client/node_update.go index 6dfa11b3a6..54c26811c8 100644 --- a/vendor/github.com/moby/moby/client/node_update.go +++ b/vendor/github.com/moby/moby/client/node_update.go @@ -3,20 +3,21 @@ package client import ( "context" "net/url" - - "github.com/moby/moby/api/types/swarm" ) +type NodeUpdateResult struct { +} + // NodeUpdate updates a Node. -func (cli *Client) NodeUpdate(ctx context.Context, nodeID string, version swarm.Version, node swarm.NodeSpec) error { +func (cli *Client) NodeUpdate(ctx context.Context, nodeID string, options NodeUpdateOptions) (NodeUpdateResult, error) { nodeID, err := trimID("node", nodeID) if err != nil { - return err + return NodeUpdateResult{}, err } query := url.Values{} - query.Set("version", version.String()) - resp, err := cli.post(ctx, "/nodes/"+nodeID+"/update", query, node, nil) + query.Set("version", options.Version.String()) + resp, err := cli.post(ctx, "/nodes/"+nodeID+"/update", query, options.Node, nil) defer ensureReaderClosed(resp) - return err + return NodeUpdateResult{}, err } diff --git a/vendor/github.com/moby/moby/client/swarm_node_inspect_opts.go b/vendor/github.com/moby/moby/client/swarm_node_inspect_opts.go new file mode 100644 index 0000000000..197e495fb7 --- /dev/null +++ b/vendor/github.com/moby/moby/client/swarm_node_inspect_opts.go @@ -0,0 +1,5 @@ +package client + +// NodeInspectOptions holds parameters to inspect nodes with. +type NodeInspectOptions struct { +} diff --git a/vendor/github.com/moby/moby/client/swarm_node_update_opts.go b/vendor/github.com/moby/moby/client/swarm_node_update_opts.go new file mode 100644 index 0000000000..738b9f871f --- /dev/null +++ b/vendor/github.com/moby/moby/client/swarm_node_update_opts.go @@ -0,0 +1,9 @@ +package client + +import "github.com/moby/moby/api/types/swarm" + +// NodeUpdateOptions holds parameters to update nodes with. +type NodeUpdateOptions struct { + Version swarm.Version + Node swarm.NodeSpec +}