Browse code

Move "commit" to daemon/commit.go

This is part of an effort to break apart the deprecated server/ package

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)

Solomon Hykes authored on 2014/08/01 05:57:21
Showing 4 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,84 @@
0
+package daemon
1
+
2
+import (
3
+	"github.com/docker/docker/engine"
4
+	"github.com/docker/docker/image"
5
+	"github.com/docker/docker/runconfig"
6
+)
7
+
8
+func (daemon *Daemon) ContainerCommit(job *engine.Job) engine.Status {
9
+	if len(job.Args) != 1 {
10
+		return job.Errorf("Not enough arguments. Usage: %s CONTAINER\n", job.Name)
11
+	}
12
+	name := job.Args[0]
13
+
14
+	container := daemon.Get(name)
15
+	if container == nil {
16
+		return job.Errorf("No such container: %s", name)
17
+	}
18
+
19
+	var (
20
+		config    = container.Config
21
+		newConfig runconfig.Config
22
+	)
23
+
24
+	if err := job.GetenvJson("config", &newConfig); err != nil {
25
+		return job.Error(err)
26
+	}
27
+
28
+	if err := runconfig.Merge(&newConfig, config); err != nil {
29
+		return job.Error(err)
30
+	}
31
+
32
+	img, err := daemon.Commit(container, job.Getenv("repo"), job.Getenv("tag"), job.Getenv("comment"), job.Getenv("author"), job.GetenvBool("pause"), &newConfig)
33
+	if err != nil {
34
+		return job.Error(err)
35
+	}
36
+	job.Printf("%s\n", img.ID)
37
+	return engine.StatusOK
38
+}
39
+
40
+// Commit creates a new filesystem image from the current state of a container.
41
+// The image can optionally be tagged into a repository
42
+func (daemon *Daemon) Commit(container *Container, repository, tag, comment, author string, pause bool, config *runconfig.Config) (*image.Image, error) {
43
+	if pause {
44
+		container.Pause()
45
+		defer container.Unpause()
46
+	}
47
+
48
+	if err := container.Mount(); err != nil {
49
+		return nil, err
50
+	}
51
+	defer container.Unmount()
52
+
53
+	rwTar, err := container.ExportRw()
54
+	if err != nil {
55
+		return nil, err
56
+	}
57
+	defer rwTar.Close()
58
+
59
+	// Create a new image from the container's base layers + a new layer from container changes
60
+	var (
61
+		containerID, containerImage string
62
+		containerConfig             *runconfig.Config
63
+	)
64
+
65
+	if container != nil {
66
+		containerID = container.ID
67
+		containerImage = container.Image
68
+		containerConfig = container.Config
69
+	}
70
+
71
+	img, err := daemon.graph.Create(rwTar, containerID, containerImage, comment, author, containerConfig, config)
72
+	if err != nil {
73
+		return nil, err
74
+	}
75
+
76
+	// Register the image if needed
77
+	if repository != "" {
78
+		if err := daemon.repositories.Set(repository, tag, img.ID, true); err != nil {
79
+			return img, err
80
+		}
81
+	}
82
+	return img, nil
83
+}
... ...
@@ -141,6 +141,9 @@ func (daemon *Daemon) Install(eng *engine.Engine) error {
141 141
 	if err := eng.Register("resize", daemon.ContainerResize); err != nil {
142 142
 		return err
143 143
 	}
144
+	if err := eng.Register("commit", daemon.ContainerCommit); err != nil {
145
+		return err
146
+	}
144 147
 	return nil
145 148
 }
146 149
 
... ...
@@ -626,51 +629,6 @@ func (daemon *Daemon) createRootfs(container *Container, img *image.Image) error
626 626
 	return nil
627 627
 }
628 628
 
629
-// Commit creates a new filesystem image from the current state of a container.
630
-// The image can optionally be tagged into a repository
631
-func (daemon *Daemon) Commit(container *Container, repository, tag, comment, author string, pause bool, config *runconfig.Config) (*image.Image, error) {
632
-	if pause {
633
-		container.Pause()
634
-		defer container.Unpause()
635
-	}
636
-
637
-	if err := container.Mount(); err != nil {
638
-		return nil, err
639
-	}
640
-	defer container.Unmount()
641
-
642
-	rwTar, err := container.ExportRw()
643
-	if err != nil {
644
-		return nil, err
645
-	}
646
-	defer rwTar.Close()
647
-
648
-	// Create a new image from the container's base layers + a new layer from container changes
649
-	var (
650
-		containerID, containerImage string
651
-		containerConfig             *runconfig.Config
652
-	)
653
-
654
-	if container != nil {
655
-		containerID = container.ID
656
-		containerImage = container.Image
657
-		containerConfig = container.Config
658
-	}
659
-
660
-	img, err := daemon.graph.Create(rwTar, containerID, containerImage, comment, author, containerConfig, config)
661
-	if err != nil {
662
-		return nil, err
663
-	}
664
-
665
-	// Register the image if needed
666
-	if repository != "" {
667
-		if err := daemon.repositories.Set(repository, tag, img.ID, true); err != nil {
668
-			return img, err
669
-		}
670
-	}
671
-	return img, nil
672
-}
673
-
674 629
 func GetFullContainerName(name string) (string, error) {
675 630
 	if name == "" {
676 631
 		return "", fmt.Errorf("Container name cannot be empty")
... ...
@@ -23,7 +23,6 @@ import (
23 23
 	"github.com/docker/docker/engine"
24 24
 	"github.com/docker/docker/pkg/graphdb"
25 25
 	"github.com/docker/docker/pkg/tailfile"
26
-	"github.com/docker/docker/runconfig"
27 26
 	"github.com/docker/docker/utils"
28 27
 )
29 28
 
... ...
@@ -229,38 +228,6 @@ func (srv *Server) Containers(job *engine.Job) engine.Status {
229 229
 	return engine.StatusOK
230 230
 }
231 231
 
232
-func (srv *Server) ContainerCommit(job *engine.Job) engine.Status {
233
-	if len(job.Args) != 1 {
234
-		return job.Errorf("Not enough arguments. Usage: %s CONTAINER\n", job.Name)
235
-	}
236
-	name := job.Args[0]
237
-
238
-	container := srv.daemon.Get(name)
239
-	if container == nil {
240
-		return job.Errorf("No such container: %s", name)
241
-	}
242
-
243
-	var (
244
-		config    = container.Config
245
-		newConfig runconfig.Config
246
-	)
247
-
248
-	if err := job.GetenvJson("config", &newConfig); err != nil {
249
-		return job.Error(err)
250
-	}
251
-
252
-	if err := runconfig.Merge(&newConfig, config); err != nil {
253
-		return job.Error(err)
254
-	}
255
-
256
-	img, err := srv.daemon.Commit(container, job.Getenv("repo"), job.Getenv("tag"), job.Getenv("comment"), job.Getenv("author"), job.GetenvBool("pause"), &newConfig)
257
-	if err != nil {
258
-		return job.Error(err)
259
-	}
260
-	job.Printf("%s\n", img.ID)
261
-	return engine.StatusOK
262
-}
263
-
264 232
 func (srv *Server) ContainerDestroy(job *engine.Job) engine.Status {
265 233
 	if len(job.Args) != 1 {
266 234
 		return job.Errorf("Not enough arguments. Usage: %s CONTAINER\n", job.Name)
... ...
@@ -87,7 +87,6 @@ func InitServer(job *engine.Job) engine.Status {
87 87
 
88 88
 	for name, handler := range map[string]engine.Handler{
89 89
 		"tag":              srv.ImageTag, // FIXME merge with "image_tag"
90
-		"commit":           srv.ContainerCommit,
91 90
 		"info":             srv.DockerInfo,
92 91
 		"container_delete": srv.ContainerDestroy,
93 92
 		"image_export":     srv.ImageExport,