diff --git a/backends/apiserver.go b/backends/apiserver.go index 198109fef6..a163657753 100644 --- a/backends/apiserver.go +++ b/backends/apiserver.go @@ -58,7 +58,28 @@ func getContainersJSON(out beam.Sender, version version.Version, w http.Response return err } - return writeJSON(w, 200, names) + return writeJSON(w, http.StatusOK, names) +} + +func postContainersStart(out beam.Sender, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error { + if vars == nil { + return fmt.Errorf("Missing parameter") + } + + // TODO: r.Body + + name := vars["name"] + _, containerOut, err := beam.Obj(out).Attach(name) + container := beam.Obj(containerOut) + if err != nil { + return err + } + if err := container.Start(); err != nil { + return err + } + + w.WriteHeader(http.StatusNoContent) + return nil } func createRouter(out beam.Sender) (*mux.Router, error) { @@ -68,7 +89,9 @@ func createRouter(out beam.Sender) (*mux.Router, error) { "/_ping": ping, "/containers/json": getContainersJSON, }, - "POST": {}, + "POST": { + "/containers/{name:.*}/start": postContainersStart, + }, "DELETE": {}, "OPTIONS": {}, } diff --git a/backends/debug.go b/backends/debug.go index 42e4cad579..fa8020676f 100644 --- a/backends/debug.go +++ b/backends/debug.go @@ -11,7 +11,6 @@ func Debug() beam.Sender { backend := beam.NewServer() backend.OnSpawn(beam.Handler(func(ctx *beam.Message) error { instance := beam.Task(func(in beam.Receiver, out beam.Sender) { - fmt.Printf("debug backend!") for { msg, err := in.Receive(beam.Ret) if err != nil { diff --git a/backends/forward.go b/backends/forward.go index 4ec2c54ca0..e808228b27 100644 --- a/backends/forward.go +++ b/backends/forward.go @@ -46,10 +46,15 @@ type forwarder struct { } func (f *forwarder) attach(ctx *beam.Message) error { - ctx.Ret.Send(&beam.Message{Verb: beam.Ack, Ret: f.Server}) - for { - time.Sleep(1 * time.Second) - (&beam.Object{ctx.Ret}).Log("forward: heartbeat") + if ctx.Args[0] == "" { + ctx.Ret.Send(&beam.Message{Verb: beam.Ack, Ret: f.Server}) + for { + time.Sleep(1 * time.Second) + (&beam.Object{ctx.Ret}).Log("forward: heartbeat") + } + } else { + c := f.newContainer(ctx.Args[0]) + ctx.Ret.Send(&beam.Message{Verb: beam.Ack, Ret: c}) } return nil }