From 15689b56c8e397d3207dad5b23937cb9b1e453cd Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Mon, 6 Jan 2014 17:34:51 -0800 Subject: [PATCH] Move restart to a job Docker-DCO-1.1-Signed-off-by: Victor Vieux (github: vieux) --- api.go | 9 +++------ integration/server_test.go | 4 +++- server.go | 26 +++++++++++++++++++++----- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/api.go b/api.go index 1128c7a2b7..da7849d16b 100644 --- a/api.go +++ b/api.go @@ -596,15 +596,12 @@ func postContainersRestart(srv *Server, version float64, w http.ResponseWriter, if err := parseForm(r); err != nil { return err } - t, err := strconv.Atoi(r.Form.Get("t")) - if err != nil || t < 0 { - t = 10 - } if vars == nil { 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 } w.WriteHeader(http.StatusNoContent) diff --git a/integration/server_test.go b/integration/server_test.go index 2650311c36..60f6209ab9 100644 --- a/integration/server_test.go +++ b/integration/server_test.go @@ -188,7 +188,9 @@ func TestCreateStartRestartStopStartKillRm(t *testing.T) { 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) } diff --git a/server.go b/server.go index 2405380ea3..d303d235e4 100644 --- a/server.go +++ b/server.go @@ -84,6 +84,10 @@ func jobInitApi(job *engine.Job) engine.Status { job.Error(err) 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 { job.Error(err) return engine.StatusErr @@ -1419,16 +1423,28 @@ func (srv *Server) ContainerCreate(job *engine.Job) engine.Status { 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 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)) } 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 {