Bladeren bron

Merge pull request #2843 from shykes/engine-job-wait

New engine job:wait
Victor Vieux 11 jaren geleden
bovenliggende
commit
a74be95b23
3 gewijzigde bestanden met toevoegingen van 26 en 10 verwijderingen
  1. 9 5
      api.go
  2. 2 2
      integration/server_test.go
  3. 15 3
      server.go

+ 9 - 5
api.go

@@ -710,14 +710,18 @@ func postContainersWait(srv *Server, version float64, w http.ResponseWriter, r *
 	if vars == nil {
 	if vars == nil {
 		return fmt.Errorf("Missing parameter")
 		return fmt.Errorf("Missing parameter")
 	}
 	}
-	name := vars["name"]
-
-	status, err := srv.ContainerWait(name)
+	job := srv.Eng.Job("wait", vars["name"])
+	var statusStr string
+	job.Stdout.AddString(&statusStr)
+	if err := job.Run(); err != nil {
+		return err
+	}
+	// Parse a 16-bit encoded integer to map typical unix exit status.
+	status, err := strconv.ParseInt(statusStr, 10, 16)
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
-
-	return writeJSON(w, http.StatusOK, &APIWait{StatusCode: status})
+	return writeJSON(w, http.StatusOK, &APIWait{StatusCode: int(status)})
 }
 }
 
 
 func postContainersResize(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func postContainersResize(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {

+ 2 - 2
integration/server_test.go

@@ -256,7 +256,7 @@ func TestRmi(t *testing.T) {
 		t.Fatal(err)
 		t.Fatal(err)
 	}
 	}
 
 
-	if _, err := srv.ContainerWait(containerID); err != nil {
+	if err := eng.Job("wait", containerID).Run(); err != nil {
 		t.Fatal(err)
 		t.Fatal(err)
 	}
 	}
 
 
@@ -281,7 +281,7 @@ func TestRmi(t *testing.T) {
 		t.Fatal(err)
 		t.Fatal(err)
 	}
 	}
 
 
-	if _, err := srv.ContainerWait(containerID); err != nil {
+	if err := eng.Job("wait", containerID).Run(); err != nil {
 		t.Fatal(err)
 		t.Fatal(err)
 	}
 	}
 
 

+ 15 - 3
server.go

@@ -82,6 +82,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("wait", srv.ContainerWait); err != nil {
+		job.Error(err)
+		return engine.StatusErr
+	}
 	return engine.StatusOK
 	return engine.StatusOK
 }
 }
 
 
@@ -1718,11 +1722,19 @@ func (srv *Server) ContainerStop(name string, t int) error {
 	return nil
 	return nil
 }
 }
 
 
-func (srv *Server) ContainerWait(name string) (int, error) {
+func (srv *Server) ContainerWait(job *engine.Job) engine.Status {
+	if len(job.Args) != 1 {
+		job.Errorf("Usage: %s", job.Name)
+		return engine.StatusErr
+	}
+	name := job.Args[0]
 	if container := srv.runtime.Get(name); container != nil {
 	if container := srv.runtime.Get(name); container != nil {
-		return container.Wait(), nil
+		status := container.Wait()
+		job.Printf("%d\n", status)
+		return engine.StatusOK
 	}
 	}
-	return 0, fmt.Errorf("No such container: %s", name)
+	job.Errorf("%s: no such container: %s", job.Name, name)
+	return engine.StatusErr
 }
 }
 
 
 func (srv *Server) ContainerResize(name string, h, w int) error {
 func (srv *Server) ContainerResize(name string, h, w int) error {