Browse Source

Merge pull request #27516 from allencloud/change-remove-multi-nodes

make every node and plugin removal call api
Aaron Lehmann 8 năm trước cách đây
mục cha
commit
a67a977305
2 tập tin đã thay đổi với 15 bổ sung3 xóa
  1. 11 1
      cli/command/node/remove.go
  2. 4 2
      cli/command/plugin/remove.go

+ 11 - 1
cli/command/node/remove.go

@@ -2,6 +2,7 @@ package node
 
 import (
 	"fmt"
+	"strings"
 
 	"golang.org/x/net/context"
 
@@ -35,12 +36,21 @@ func newRemoveCommand(dockerCli *command.DockerCli) *cobra.Command {
 func runRemove(dockerCli *command.DockerCli, args []string, opts removeOptions) error {
 	client := dockerCli.Client()
 	ctx := context.Background()
+
+	var errs []string
+
 	for _, nodeID := range args {
 		err := client.NodeRemove(ctx, nodeID, types.NodeRemoveOptions{Force: opts.force})
 		if err != nil {
-			return err
+			errs = append(errs, err.Error())
+			continue
 		}
 		fmt.Fprintf(dockerCli.Out(), "%s\n", nodeID)
 	}
+
+	if len(errs) > 0 {
+		return fmt.Errorf("%s", strings.Join(errs, "\n"))
+	}
+
 	return nil
 }

+ 4 - 2
cli/command/plugin/remove.go

@@ -45,14 +45,16 @@ func runRemove(dockerCli *command.DockerCli, opts *rmOptions) error {
 	for _, name := range opts.plugins {
 		named, err := reference.ParseNamed(name) // FIXME: validate
 		if err != nil {
-			return err
+			errs = append(errs, err)
+			continue
 		}
 		if reference.IsNameOnly(named) {
 			named = reference.WithDefaultTag(named)
 		}
 		ref, ok := named.(reference.NamedTagged)
 		if !ok {
-			return fmt.Errorf("invalid name: %s", named.String())
+			errs = append(errs, fmt.Errorf("invalid name: %s", named.String()))
+			continue
 		}
 		// TODO: pass names to api instead of making multiple api calls
 		if err := dockerCli.Client().PluginRemove(ctx, ref.String(), types.PluginRemoveOptions{Force: opts.force}); err != nil {