mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
move insert to a job
Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
This commit is contained in:
parent
52ec95f363
commit
0fb8a55753
3 changed files with 43 additions and 28 deletions
15
api.go
15
api.go
|
@ -510,24 +510,19 @@ func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *ht
|
||||||
if err := parseForm(r); err != nil {
|
if err := parseForm(r); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
url := r.Form.Get("url")
|
|
||||||
path := r.Form.Get("path")
|
|
||||||
if vars == nil {
|
if vars == nil {
|
||||||
return fmt.Errorf("Missing parameter")
|
return fmt.Errorf("Missing parameter")
|
||||||
}
|
}
|
||||||
name := vars["name"]
|
|
||||||
if version > 1.0 {
|
if version > 1.0 {
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
job := srv.Eng.Job("insert", vars["name"], r.Form.Get("url"), r.Form.Get("path"))
|
||||||
|
job.SetenvBool("json", version > 1.0)
|
||||||
|
job.Stdout.Add(w)
|
||||||
|
if err := job.Run(); err != nil {
|
||||||
sf := utils.NewStreamFormatter(version > 1.0)
|
sf := utils.NewStreamFormatter(version > 1.0)
|
||||||
err := srv.ImageInsert(name, url, path, w, sf)
|
|
||||||
if err != nil {
|
|
||||||
if sf.Used() {
|
|
||||||
w.Write(sf.FormatError(err))
|
w.Write(sf.FormatError(err))
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -2,8 +2,6 @@ package docker
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/dotcloud/docker"
|
"github.com/dotcloud/docker"
|
||||||
"github.com/dotcloud/docker/utils"
|
|
||||||
"io/ioutil"
|
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
@ -365,20 +363,19 @@ func TestImageInsert(t *testing.T) {
|
||||||
eng := NewTestEngine(t)
|
eng := NewTestEngine(t)
|
||||||
defer mkRuntimeFromEngine(eng, t).Nuke()
|
defer mkRuntimeFromEngine(eng, t).Nuke()
|
||||||
srv := mkServerFromEngine(eng, t)
|
srv := mkServerFromEngine(eng, t)
|
||||||
sf := utils.NewStreamFormatter(true)
|
|
||||||
|
|
||||||
// bad image name fails
|
// bad image name fails
|
||||||
if err := srv.ImageInsert("foo", "https://www.docker.io/static/img/docker-top-logo.png", "/foo", ioutil.Discard, sf); err == nil {
|
if err := srv.Eng.Job("insert", "foo", "https://www.docker.io/static/img/docker-top-logo.png", "/foo").Run(); err == nil {
|
||||||
t.Fatal("expected an error and got none")
|
t.Fatal("expected an error and got none")
|
||||||
}
|
}
|
||||||
|
|
||||||
// bad url fails
|
// bad url fails
|
||||||
if err := srv.ImageInsert(unitTestImageID, "http://bad_host_name_that_will_totally_fail.com/", "/foo", ioutil.Discard, sf); err == nil {
|
if err := srv.Eng.Job("insert", unitTestImageID, "http://bad_host_name_that_will_totally_fail.com/", "/foo").Run(); err == nil {
|
||||||
t.Fatal("expected an error and got none")
|
t.Fatal("expected an error and got none")
|
||||||
}
|
}
|
||||||
|
|
||||||
// success returns nil
|
// success returns nil
|
||||||
if err := srv.ImageInsert(unitTestImageID, "https://www.docker.io/static/img/docker-top-logo.png", "/foo", ioutil.Discard, sf); err != nil {
|
if err := srv.Eng.Job("insert", unitTestImageID, "https://www.docker.io/static/img/docker-top-logo.png", "/foo").Run(); err != nil {
|
||||||
t.Fatalf("expected no error, but got %v", err)
|
t.Fatalf("expected no error, but got %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
43
server.go
43
server.go
|
@ -143,6 +143,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("insert", srv.ImageInsert); err != nil {
|
||||||
|
job.Error(err)
|
||||||
|
return engine.StatusErr
|
||||||
|
}
|
||||||
return engine.StatusOK
|
return engine.StatusOK
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -511,39 +515,58 @@ func (srv *Server) ImagesSearch(term string) ([]registry.SearchResult, error) {
|
||||||
return results.Results, nil
|
return results.Results, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (srv *Server) ImageInsert(name, url, path string, out io.Writer, sf *utils.StreamFormatter) error {
|
func (srv *Server) ImageInsert(job *engine.Job) engine.Status {
|
||||||
out = utils.NewWriteFlusher(out)
|
if len(job.Args) != 3 {
|
||||||
|
job.Errorf("Usage: %s IMAGE URL PATH\n", job.Name)
|
||||||
|
return engine.StatusErr
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
name = job.Args[0]
|
||||||
|
url = job.Args[1]
|
||||||
|
path = job.Args[2]
|
||||||
|
)
|
||||||
|
|
||||||
|
sf := utils.NewStreamFormatter(job.GetenvBool("json"))
|
||||||
|
|
||||||
|
out := utils.NewWriteFlusher(job.Stdout)
|
||||||
img, err := srv.runtime.repositories.LookupImage(name)
|
img, err := srv.runtime.repositories.LookupImage(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
job.Error(err)
|
||||||
|
return engine.StatusErr
|
||||||
}
|
}
|
||||||
|
|
||||||
file, err := utils.Download(url)
|
file, err := utils.Download(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
job.Error(err)
|
||||||
|
return engine.StatusErr
|
||||||
}
|
}
|
||||||
defer file.Body.Close()
|
defer file.Body.Close()
|
||||||
|
|
||||||
config, _, _, err := ParseRun([]string{img.ID, "echo", "insert", url, path}, srv.runtime.capabilities)
|
config, _, _, err := ParseRun([]string{img.ID, "echo", "insert", url, path}, srv.runtime.capabilities)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
job.Error(err)
|
||||||
|
return engine.StatusErr
|
||||||
}
|
}
|
||||||
|
|
||||||
c, _, err := srv.runtime.Create(config, "")
|
c, _, err := srv.runtime.Create(config, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
job.Error(err)
|
||||||
|
return engine.StatusErr
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.Inject(utils.ProgressReader(file.Body, int(file.ContentLength), out, sf, false, "", "Downloading"), path); err != nil {
|
if err := c.Inject(utils.ProgressReader(file.Body, int(file.ContentLength), out, sf, false, "", "Downloading"), path); err != nil {
|
||||||
return err
|
job.Error(err)
|
||||||
|
return engine.StatusErr
|
||||||
}
|
}
|
||||||
// FIXME: Handle custom repo, tag comment, author
|
// FIXME: Handle custom repo, tag comment, author
|
||||||
img, err = srv.runtime.Commit(c, "", "", img.Comment, img.Author, nil)
|
img, err = srv.runtime.Commit(c, "", "", img.Comment, img.Author, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
out.Write(sf.FormatError(err))
|
||||||
|
return engine.StatusOK
|
||||||
}
|
}
|
||||||
out.Write(sf.FormatStatus(img.ID, ""))
|
out.Write(sf.FormatStatus("", img.ID))
|
||||||
return nil
|
return engine.StatusOK
|
||||||
}
|
}
|
||||||
|
|
||||||
func (srv *Server) ImagesViz(job *engine.Job) engine.Status {
|
func (srv *Server) ImagesViz(job *engine.Job) engine.Status {
|
||||||
|
|
Loading…
Add table
Reference in a new issue