Browse Source

Merge pull request #3476 from vieux/restart_job

Move restart to a job
Victor Vieux 11 years ago
parent
commit
ad162b75a0
3 changed files with 27 additions and 12 deletions
  1. 3 6
      api.go
  2. 3 1
      integration/server_test.go
  3. 21 5
      server.go

+ 3 - 6
api.go

@@ -598,15 +598,12 @@ func postContainersRestart(srv *Server, version float64, w http.ResponseWriter,
 	if err := parseForm(r); err != nil {
 	if err := parseForm(r); err != nil {
 		return err
 		return err
 	}
 	}
-	t, err := strconv.Atoi(r.Form.Get("t"))
-	if err != nil || t < 0 {
-		t = 10
-	}
 	if vars == nil {
 	if vars == nil {
 		return fmt.Errorf("Missing parameter")
 		return fmt.Errorf("Missing parameter")
 	}
 	}
-	name := vars["name"]
-	if err := srv.ContainerRestart(name, t); err != nil {
+	job := srv.Eng.Job("restart", vars["name"])
+	job.Setenv("t", r.Form.Get("t"))
+	if err := job.Run(); err != nil {
 		return err
 		return err
 	}
 	}
 	w.WriteHeader(http.StatusNoContent)
 	w.WriteHeader(http.StatusNoContent)

+ 3 - 1
integration/server_test.go

@@ -188,7 +188,9 @@ func TestCreateStartRestartStopStartKillRm(t *testing.T) {
 		t.Fatal(err)
 		t.Fatal(err)
 	}
 	}
 
 
-	if err := srv.ContainerRestart(id, 15); err != nil {
+	job = eng.Job("restart", id)
+	job.SetenvInt("t", 15)
+	if err := job.Run(); err != nil {
 		t.Fatal(err)
 		t.Fatal(err)
 	}
 	}
 
 

+ 21 - 5
server.go

@@ -83,6 +83,10 @@ func jobInitApi(job *engine.Job) engine.Status {
 		job.Error(err)
 		job.Error(err)
 		return engine.StatusErr
 		return engine.StatusErr
 	}
 	}
+	if err := job.Eng.Register("restart", srv.ContainerRestart); err != nil {
+		job.Error(err)
+		return engine.StatusErr
+	}
 	if err := job.Eng.Register("start", srv.ContainerStart); err != nil {
 	if err := job.Eng.Register("start", srv.ContainerStart); err != nil {
 		job.Error(err)
 		job.Error(err)
 		return engine.StatusErr
 		return engine.StatusErr
@@ -1418,16 +1422,28 @@ func (srv *Server) ContainerCreate(job *engine.Job) engine.Status {
 	return engine.StatusOK
 	return engine.StatusOK
 }
 }
 
 
-func (srv *Server) ContainerRestart(name string, t int) error {
+func (srv *Server) ContainerRestart(job *engine.Job) engine.Status {
+	if len(job.Args) != 1 {
+		job.Errorf("Usage: %s CONTAINER\n", job.Name)
+		return engine.StatusErr
+	}
+	name := job.Args[0]
+	t := job.GetenvInt("t")
+	if t == -1 {
+		t = 10
+	}
 	if container := srv.runtime.Get(name); container != nil {
 	if container := srv.runtime.Get(name); container != nil {
-		if err := container.Restart(t); err != nil {
-			return fmt.Errorf("Cannot restart container %s: %s", name, err)
+		if err := container.Restart(int(t)); err != nil {
+			job.Errorf("Cannot restart container %s: %s\n", name, err)
+			return engine.StatusErr
 		}
 		}
 		srv.LogEvent("restart", container.ID, srv.runtime.repositories.ImageName(container.Image))
 		srv.LogEvent("restart", container.ID, srv.runtime.repositories.ImageName(container.Image))
 	} else {
 	} else {
-		return fmt.Errorf("No such container: %s", name)
+		job.Errorf("No such container: %s\n", name)
+		return engine.StatusErr
 	}
 	}
-	return nil
+	return engine.StatusOK
+
 }
 }
 
 
 func (srv *Server) ContainerDestroy(name string, removeVolume, removeLink bool) error {
 func (srv *Server) ContainerDestroy(name string, removeVolume, removeLink bool) error {