Browse code

Move restart to a job

Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)

Victor Vieux authored on 2014/01/07 10:34:51
Showing 3 changed files
... ...
@@ -596,15 +596,12 @@ func postContainersRestart(srv *Server, version float64, w http.ResponseWriter,
596 596
 	if err := parseForm(r); err != nil {
597 597
 		return err
598 598
 	}
599
-	t, err := strconv.Atoi(r.Form.Get("t"))
600
-	if err != nil || t < 0 {
601
-		t = 10
602
-	}
603 599
 	if vars == nil {
604 600
 		return fmt.Errorf("Missing parameter")
605 601
 	}
606
-	name := vars["name"]
607
-	if err := srv.ContainerRestart(name, t); err != nil {
602
+	job := srv.Eng.Job("restart", vars["name"])
603
+	job.Setenv("t", r.Form.Get("t"))
604
+	if err := job.Run(); err != nil {
608 605
 		return err
609 606
 	}
610 607
 	w.WriteHeader(http.StatusNoContent)
... ...
@@ -188,7 +188,9 @@ func TestCreateStartRestartStopStartKillRm(t *testing.T) {
188 188
 		t.Fatal(err)
189 189
 	}
190 190
 
191
-	if err := srv.ContainerRestart(id, 15); err != nil {
191
+	job = eng.Job("restart", id)
192
+	job.SetenvInt("t", 15)
193
+	if err := job.Run(); err != nil {
192 194
 		t.Fatal(err)
193 195
 	}
194 196
 
... ...
@@ -84,6 +84,10 @@ func jobInitApi(job *engine.Job) engine.Status {
84 84
 		job.Error(err)
85 85
 		return engine.StatusErr
86 86
 	}
87
+	if err := job.Eng.Register("restart", srv.ContainerRestart); err != nil {
88
+		job.Error(err)
89
+		return engine.StatusErr
90
+	}
87 91
 	if err := job.Eng.Register("start", srv.ContainerStart); err != nil {
88 92
 		job.Error(err)
89 93
 		return engine.StatusErr
... ...
@@ -1419,16 +1423,28 @@ func (srv *Server) ContainerCreate(job *engine.Job) engine.Status {
1419 1419
 	return engine.StatusOK
1420 1420
 }
1421 1421
 
1422
-func (srv *Server) ContainerRestart(name string, t int) error {
1422
+func (srv *Server) ContainerRestart(job *engine.Job) engine.Status {
1423
+	if len(job.Args) != 1 {
1424
+		job.Errorf("Usage: %s CONTAINER\n", job.Name)
1425
+		return engine.StatusErr
1426
+	}
1427
+	name := job.Args[0]
1428
+	t := job.GetenvInt("t")
1429
+	if t == -1 {
1430
+		t = 10
1431
+	}
1423 1432
 	if container := srv.runtime.Get(name); container != nil {
1424
-		if err := container.Restart(t); err != nil {
1425
-			return fmt.Errorf("Cannot restart container %s: %s", name, err)
1433
+		if err := container.Restart(int(t)); err != nil {
1434
+			job.Errorf("Cannot restart container %s: %s\n", name, err)
1435
+			return engine.StatusErr
1426 1436
 		}
1427 1437
 		srv.LogEvent("restart", container.ID, srv.runtime.repositories.ImageName(container.Image))
1428 1438
 	} else {
1429
-		return fmt.Errorf("No such container: %s", name)
1439
+		job.Errorf("No such container: %s\n", name)
1440
+		return engine.StatusErr
1430 1441
 	}
1431
-	return nil
1442
+	return engine.StatusOK
1443
+
1432 1444
 }
1433 1445
 
1434 1446
 func (srv *Server) ContainerDestroy(name string, removeVolume, removeLink bool) error {