Browse code

builder: remove dependency on image

Signed-off-by: Tibor Vass <tibor@docker.com>

Tibor Vass authored on 2015/12/17 01:01:36
Showing 6 changed files
... ...
@@ -11,7 +11,6 @@ import (
11 11
 
12 12
 	"github.com/docker/docker/api/types"
13 13
 	"github.com/docker/docker/daemon"
14
-	"github.com/docker/docker/image"
15 14
 	"github.com/docker/docker/runconfig"
16 15
 )
17 16
 
... ...
@@ -112,9 +111,9 @@ type Backend interface {
112 112
 	// TODO: use digest reference instead of name
113 113
 
114 114
 	// GetImage looks up a Docker image referenced by `name`.
115
-	GetImage(name string) (*image.Image, error)
115
+	GetImage(name string) (Image, error)
116 116
 	// Pull tells Docker to pull image referenced by `name`.
117
-	Pull(name string) (*image.Image, error)
117
+	Pull(name string) (Image, error)
118 118
 	// ContainerWsAttachWithLogs attaches to container.
119 119
 	ContainerWsAttachWithLogs(name string, cfg *daemon.ContainerWsAttachWithLogsConfig) error
120 120
 	// ContainerCreate creates a new Docker container and returns potential warnings
... ...
@@ -18,8 +18,8 @@ import (
18 18
 	"strings"
19 19
 
20 20
 	"github.com/Sirupsen/logrus"
21
+	"github.com/docker/docker/builder"
21 22
 	derr "github.com/docker/docker/errors"
22
-	"github.com/docker/docker/image"
23 23
 	flag "github.com/docker/docker/pkg/mflag"
24 24
 	"github.com/docker/docker/pkg/nat"
25 25
 	"github.com/docker/docker/pkg/signal"
... ...
@@ -210,7 +210,7 @@ func from(b *Builder, args []string, attributes map[string]bool, original string
210 210
 	}
211 211
 
212 212
 	var (
213
-		image *image.Image
213
+		image builder.Image
214 214
 		err   error
215 215
 	)
216 216
 	// TODO: don't use `name`, instead resolve it to a digest
... ...
@@ -24,7 +24,6 @@ import (
24 24
 	"github.com/docker/docker/builder"
25 25
 	"github.com/docker/docker/builder/dockerfile/parser"
26 26
 	"github.com/docker/docker/daemon"
27
-	"github.com/docker/docker/image"
28 27
 	"github.com/docker/docker/pkg/archive"
29 28
 	"github.com/docker/docker/pkg/httputils"
30 29
 	"github.com/docker/docker/pkg/ioutils"
... ...
@@ -403,11 +402,11 @@ func containsWildcards(name string) bool {
403 403
 	return false
404 404
 }
405 405
 
406
-func (b *Builder) processImageFrom(img *image.Image) error {
407
-	b.image = img.ID().String()
406
+func (b *Builder) processImageFrom(img builder.Image) error {
407
+	b.image = img.ID()
408 408
 
409 409
 	if img.Config != nil {
410
-		b.runConfig = img.Config
410
+		b.runConfig = img.Config()
411 411
 	}
412 412
 
413 413
 	// The default path will be blank on Windows (set by HCS)
414 414
new file mode 100644
... ...
@@ -0,0 +1,9 @@
0
+package builder
1
+
2
+import "github.com/docker/docker/runconfig"
3
+
4
+// Image represents a Docker image used by the builder.
5
+type Image interface {
6
+	ID() string
7
+	Config() *runconfig.Config
8
+}
... ...
@@ -36,7 +36,7 @@ type Docker struct {
36 36
 var _ builder.Backend = Docker{}
37 37
 
38 38
 // Pull tells Docker to pull image referenced by `name`.
39
-func (d Docker) Pull(name string) (*image.Image, error) {
39
+func (d Docker) Pull(name string) (builder.Image, error) {
40 40
 	ref, err := reference.ParseNamed(name)
41 41
 	if err != nil {
42 42
 		return nil, err
... ...
@@ -69,8 +69,16 @@ func (d Docker) Pull(name string) (*image.Image, error) {
69 69
 	if err := d.Daemon.PullImage(ref, nil, pullRegistryAuth, ioutils.NopWriteCloser(d.OutOld)); err != nil {
70 70
 		return nil, err
71 71
 	}
72
+	return d.GetImage(name)
73
+}
72 74
 
73
-	return d.Daemon.GetImage(name)
75
+// GetImage looks up a Docker image referenced by `name`.
76
+func (d Docker) GetImage(name string) (builder.Image, error) {
77
+	img, err := d.Daemon.GetImage(name)
78
+	if err != nil {
79
+		return nil, err
80
+	}
81
+	return imgWrap{img}, nil
74 82
 }
75 83
 
76 84
 // ContainerUpdateCmd updates Path and Args for the container with ID cID.
... ...
@@ -84,18 +92,6 @@ func (d Docker) ContainerUpdateCmd(cID string, cmd []string) error {
84 84
 	return nil
85 85
 }
86 86
 
87
-// Retain retains an image avoiding it to be removed or overwritten until a corresponding Release() call.
88
-func (d Docker) Retain(sessionID, imgID string) {
89
-	// FIXME: This will be solved with tags in client-side builder
90
-	//d.Daemon.Graph().Retain(sessionID, imgID)
91
-}
92
-
93
-// Release releases a list of images that were retained for the time of a build.
94
-func (d Docker) Release(sessionID string, activeImages []string) {
95
-	// FIXME: This will be solved with tags in client-side builder
96
-	//d.Daemon.Graph().Release(sessionID, activeImages...)
97
-}
98
-
99 87
 // BuilderCopy copies/extracts a source FileInfo to a destination path inside a container
100 88
 // specified by a container object.
101 89
 // TODO: make sure callers don't unnecessarily convert destPath with filepath.FromSlash (Copy does it already).
102 90
new file mode 100644
... ...
@@ -0,0 +1,18 @@
0
+package daemonbuilder
1
+
2
+import (
3
+	"github.com/docker/docker/image"
4
+	"github.com/docker/docker/runconfig"
5
+)
6
+
7
+type imgWrap struct {
8
+	inner *image.Image
9
+}
10
+
11
+func (img imgWrap) ID() string {
12
+	return string(img.inner.ID())
13
+}
14
+
15
+func (img imgWrap) Config() *runconfig.Config {
16
+	return img.inner.Config
17
+}