func containerPost(d *Daemon, r *http.Request) Response { name := mux.Vars(r)["name"] c, err := newLxdContainer(name, d) if err != nil { return SmartError(err) } buf, err := ioutil.ReadAll(r.Body) if err != nil { return InternalError(err) } body := containerPostBody{} if err := json.Unmarshal(buf, &body); err != nil { return BadRequest(err) } if body.Migration { ws, err := migration.NewMigrationSource(c.c) if err != nil { return InternalError(err) } return AsyncResponseWithWs(ws, nil) } else { if c.c.Running() { return BadRequest(fmt.Errorf("renaming of running container not allowed")) } args := DbCreateContainerArgs{ d: d, name: body.Name, ctype: cTypeRegular, config: c.config, profiles: c.profiles, ephem: c.ephemeral, baseImage: c.config["volatile.baseImage"], architecture: c.architecture, } _, err := dbCreateContainer(args) if err != nil { return SmartError(err) } run := func() error { oldPath := fmt.Sprintf("%s/", shared.VarPath("lxc", c.name)) newPath := fmt.Sprintf("%s/", shared.VarPath("lxc", body.Name)) if err := os.Rename(oldPath, newPath); err != nil { return err } removeContainer(d, c.name) return nil } return AsyncResponse(shared.OperationWrap(run), nil) } }
func containerPost(d *Daemon, r *http.Request) Response { name := mux.Vars(r)["name"] c, err := containerLXDLoad(d, name) if err != nil { return SmartError(err) } buf, err := ioutil.ReadAll(r.Body) if err != nil { return InternalError(err) } body := containerPostBody{} if err := json.Unmarshal(buf, &body); err != nil { return BadRequest(err) } if body.Migration { lxc, err := c.LXContainerGet() if err != nil { return InternalError(err) } idmapset, err := c.IdmapSetGet() if err != nil { return InternalError(err) } ws, err := migration.NewMigrationSource(lxc, idmapset) if err != nil { return InternalError(err) } return AsyncResponseWithWs(ws, nil) } run := func() error { return c.Rename(body.Name) } return AsyncResponse(shared.OperationWrap(run), nil) }