Browse code

Move "start" to daemon/start.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:46:18
Showing 4 changed files
... ...
@@ -129,6 +129,9 @@ func (daemon *Daemon) Install(eng *engine.Engine) error {
129 129
 	if err := eng.Register("stop", daemon.ContainerStop); err != nil {
130 130
 		return err
131 131
 	}
132
+	if err := eng.Register("start", daemon.ContainerStart); err != nil {
133
+		return err
134
+	}
132 135
 	return nil
133 136
 }
134 137
 
135 138
new file mode 100644
... ...
@@ -0,0 +1,68 @@
0
+package daemon
1
+
2
+import (
3
+	"fmt"
4
+	"os"
5
+	"strings"
6
+
7
+	"github.com/docker/docker/engine"
8
+	"github.com/docker/docker/runconfig"
9
+)
10
+
11
+func (daemon *Daemon) ContainerStart(job *engine.Job) engine.Status {
12
+	if len(job.Args) < 1 {
13
+		return job.Errorf("Usage: %s container_id", job.Name)
14
+	}
15
+	var (
16
+		name      = job.Args[0]
17
+		container = daemon.Get(name)
18
+	)
19
+
20
+	if container == nil {
21
+		return job.Errorf("No such container: %s", name)
22
+	}
23
+
24
+	if container.State.IsRunning() {
25
+		return job.Errorf("Container already started")
26
+	}
27
+
28
+	// If no environment was set, then no hostconfig was passed.
29
+	if len(job.Environ()) > 0 {
30
+		hostConfig := runconfig.ContainerHostConfigFromJob(job)
31
+		if err := daemon.setHostConfig(container, hostConfig); err != nil {
32
+			return job.Error(err)
33
+		}
34
+	}
35
+	if err := container.Start(); err != nil {
36
+		return job.Errorf("Cannot start container %s: %s", name, err)
37
+	}
38
+	job.Eng.Job("log", "start", container.ID, daemon.Repositories().ImageName(container.Image)).Run()
39
+
40
+	return engine.StatusOK
41
+}
42
+
43
+func (daemon *Daemon) setHostConfig(container *Container, hostConfig *runconfig.HostConfig) error {
44
+	// Validate the HostConfig binds. Make sure that:
45
+	// the source exists
46
+	for _, bind := range hostConfig.Binds {
47
+		splitBind := strings.Split(bind, ":")
48
+		source := splitBind[0]
49
+
50
+		// ensure the source exists on the host
51
+		_, err := os.Stat(source)
52
+		if err != nil && os.IsNotExist(err) {
53
+			err = os.MkdirAll(source, 0755)
54
+			if err != nil {
55
+				return fmt.Errorf("Could not create local directory '%s' for bind mount: %s!", source, err.Error())
56
+			}
57
+		}
58
+	}
59
+	// Register any links from the host config before starting the container
60
+	if err := daemon.RegisterLinks(container, hostConfig); err != nil {
61
+		return err
62
+	}
63
+	container.SetHostConfig(hostConfig)
64
+	container.ToDisk()
65
+
66
+	return nil
67
+}
... ...
@@ -408,65 +408,6 @@ func (srv *Server) ContainerDestroy(job *engine.Job) engine.Status {
408 408
 	return engine.StatusOK
409 409
 }
410 410
 
411
-func (srv *Server) setHostConfig(container *daemon.Container, hostConfig *runconfig.HostConfig) error {
412
-	// Validate the HostConfig binds. Make sure that:
413
-	// the source exists
414
-	for _, bind := range hostConfig.Binds {
415
-		splitBind := strings.Split(bind, ":")
416
-		source := splitBind[0]
417
-
418
-		// ensure the source exists on the host
419
-		_, err := os.Stat(source)
420
-		if err != nil && os.IsNotExist(err) {
421
-			err = os.MkdirAll(source, 0755)
422
-			if err != nil {
423
-				return fmt.Errorf("Could not create local directory '%s' for bind mount: %s!", source, err.Error())
424
-			}
425
-		}
426
-	}
427
-	// Register any links from the host config before starting the container
428
-	if err := srv.daemon.RegisterLinks(container, hostConfig); err != nil {
429
-		return err
430
-	}
431
-	container.SetHostConfig(hostConfig)
432
-	container.ToDisk()
433
-
434
-	return nil
435
-}
436
-
437
-func (srv *Server) ContainerStart(job *engine.Job) engine.Status {
438
-	if len(job.Args) < 1 {
439
-		return job.Errorf("Usage: %s container_id", job.Name)
440
-	}
441
-	var (
442
-		name      = job.Args[0]
443
-		daemon    = srv.daemon
444
-		container = daemon.Get(name)
445
-	)
446
-
447
-	if container == nil {
448
-		return job.Errorf("No such container: %s", name)
449
-	}
450
-
451
-	if container.State.IsRunning() {
452
-		return job.Errorf("Container already started")
453
-	}
454
-
455
-	// If no environment was set, then no hostconfig was passed.
456
-	if len(job.Environ()) > 0 {
457
-		hostConfig := runconfig.ContainerHostConfigFromJob(job)
458
-		if err := srv.setHostConfig(container, hostConfig); err != nil {
459
-			return job.Error(err)
460
-		}
461
-	}
462
-	if err := container.Start(); err != nil {
463
-		return job.Errorf("Cannot start container %s: %s", name, err)
464
-	}
465
-	srv.LogEvent("start", container.ID, daemon.Repositories().ImageName(container.Image))
466
-
467
-	return engine.StatusOK
468
-}
469
-
470 411
 func (srv *Server) ContainerWait(job *engine.Job) engine.Status {
471 412
 	if len(job.Args) != 1 {
472 413
 		return job.Errorf("Usage: %s", 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
 		"restart":          srv.ContainerRestart,
90
-		"start":            srv.ContainerStart,
91 90
 		"wait":             srv.ContainerWait,
92 91
 		"tag":              srv.ImageTag, // FIXME merge with "image_tag"
93 92
 		"resize":           srv.ContainerResize,