Bladeren bron

Implement docker rmi with standalone client lib.

Signed-off-by: David Calavera <david.calavera@gmail.com>
David Calavera 9 jaren geleden
bovenliggende
commit
37d6fee8cf
2 gewijzigde bestanden met toevoegingen van 45 en 12 verwijderingen
  1. 37 0
      api/client/lib/image_remove.go
  2. 8 12
      api/client/rmi.go

+ 37 - 0
api/client/lib/image_remove.go

@@ -0,0 +1,37 @@
+package lib
+
+import (
+	"encoding/json"
+	"net/url"
+
+	"github.com/docker/docker/api/types"
+)
+
+// ImageRemoveOptions holds parameters to remove images.
+type ImageRemoveOptions struct {
+	ImageID       string
+	Force         bool
+	PruneChildren bool
+}
+
+// ImageRemove removes an image from the docker host.
+func (cli *Client) ImageRemove(options ImageRemoveOptions) ([]types.ImageDelete, error) {
+	var query url.Values
+
+	if options.Force {
+		query.Set("force", "1")
+	}
+	if !options.PruneChildren {
+		query.Set("noprune", "1")
+	}
+
+	resp, err := cli.DELETE("/images/"+options.ImageID, query, nil)
+	if err != nil {
+		return nil, err
+	}
+	defer ensureReaderClosed(resp)
+
+	var dels []types.ImageDelete
+	err = json.NewDecoder(resp.body).Decode(&dels)
+	return dels, err
+}

+ 8 - 12
api/client/rmi.go

@@ -1,11 +1,10 @@
 package client
 
 import (
-	"encoding/json"
 	"fmt"
 	"net/url"
 
-	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/client/lib"
 	Cli "github.com/docker/docker/cli"
 	flag "github.com/docker/docker/pkg/mflag"
 )
@@ -31,20 +30,17 @@ func (cli *DockerCli) CmdRmi(args ...string) error {
 
 	var errNames []string
 	for _, name := range cmd.Args() {
-		serverResp, err := cli.call("DELETE", "/images/"+name+"?"+v.Encode(), nil, nil)
+		options := lib.ImageRemoveOptions{
+			ImageID:       name,
+			Force:         *force,
+			PruneChildren: !*noprune,
+		}
+
+		dels, err := cli.client.ImageRemove(options)
 		if err != nil {
 			fmt.Fprintf(cli.err, "%s\n", err)
 			errNames = append(errNames, name)
 		} else {
-			defer serverResp.body.Close()
-
-			dels := []types.ImageDelete{}
-			if err := json.NewDecoder(serverResp.body).Decode(&dels); err != nil {
-				fmt.Fprintf(cli.err, "%s\n", err)
-				errNames = append(errNames, name)
-				continue
-			}
-
 			for _, del := range dels {
 				if del.Deleted != "" {
 					fmt.Fprintf(cli.out, "Deleted: %s\n", del.Deleted)