Browse code

Implement docker rmi with standalone client lib.

Signed-off-by: David Calavera <david.calavera@gmail.com>

David Calavera authored on 2015/12/05 03:13:43
Showing 2 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,37 @@
0
+package lib
1
+
2
+import (
3
+	"encoding/json"
4
+	"net/url"
5
+
6
+	"github.com/docker/docker/api/types"
7
+)
8
+
9
+// ImageRemoveOptions holds parameters to remove images.
10
+type ImageRemoveOptions struct {
11
+	ImageID       string
12
+	Force         bool
13
+	PruneChildren bool
14
+}
15
+
16
+// ImageRemove removes an image from the docker host.
17
+func (cli *Client) ImageRemove(options ImageRemoveOptions) ([]types.ImageDelete, error) {
18
+	var query url.Values
19
+
20
+	if options.Force {
21
+		query.Set("force", "1")
22
+	}
23
+	if !options.PruneChildren {
24
+		query.Set("noprune", "1")
25
+	}
26
+
27
+	resp, err := cli.DELETE("/images/"+options.ImageID, query, nil)
28
+	if err != nil {
29
+		return nil, err
30
+	}
31
+	defer ensureReaderClosed(resp)
32
+
33
+	var dels []types.ImageDelete
34
+	err = json.NewDecoder(resp.body).Decode(&dels)
35
+	return dels, err
36
+}
... ...
@@ -1,11 +1,10 @@
1 1
 package client
2 2
 
3 3
 import (
4
-	"encoding/json"
5 4
 	"fmt"
6 5
 	"net/url"
7 6
 
8
-	"github.com/docker/docker/api/types"
7
+	"github.com/docker/docker/api/client/lib"
9 8
 	Cli "github.com/docker/docker/cli"
10 9
 	flag "github.com/docker/docker/pkg/mflag"
11 10
 )
... ...
@@ -31,20 +30,17 @@ func (cli *DockerCli) CmdRmi(args ...string) error {
31 31
 
32 32
 	var errNames []string
33 33
 	for _, name := range cmd.Args() {
34
-		serverResp, err := cli.call("DELETE", "/images/"+name+"?"+v.Encode(), nil, nil)
34
+		options := lib.ImageRemoveOptions{
35
+			ImageID:       name,
36
+			Force:         *force,
37
+			PruneChildren: !*noprune,
38
+		}
39
+
40
+		dels, err := cli.client.ImageRemove(options)
35 41
 		if err != nil {
36 42
 			fmt.Fprintf(cli.err, "%s\n", err)
37 43
 			errNames = append(errNames, name)
38 44
 		} else {
39
-			defer serverResp.body.Close()
40
-
41
-			dels := []types.ImageDelete{}
42
-			if err := json.NewDecoder(serverResp.body).Decode(&dels); err != nil {
43
-				fmt.Fprintf(cli.err, "%s\n", err)
44
-				errNames = append(errNames, name)
45
-				continue
46
-			}
47
-
48 45
 			for _, del := range dels {
49 46
 				if del.Deleted != "" {
50 47
 					fmt.Fprintf(cli.out, "Deleted: %s\n", del.Deleted)