diff --git a/server/server.go b/server/server.go index 65d4fd9626..00ef9c496a 100644 --- a/server/server.go +++ b/server/server.go @@ -1,15 +1,15 @@ package server import ( - "github.com/dotcloud/docker" - "github.com/dotcloud/docker/fs" - "github.com/dotcloud/docker/future" - "github.com/dotcloud/docker/rcli" "bufio" "bytes" "encoding/json" "errors" "fmt" + "github.com/dotcloud/docker" + "github.com/dotcloud/docker/fs" + "github.com/dotcloud/docker/future" + "github.com/dotcloud/docker/rcli" "io" "net/http" "net/url" @@ -42,8 +42,7 @@ func (srv *Server) Help() string { for _, cmd := range [][]interface{}{ {"run", "Run a command in a container"}, {"ps", "Display a list of containers"}, - {"pull", "Download a tarball and create a container from it"}, - {"put", "Upload a tarball and create a container from it"}, + {"import", "Create a new filesystem image from the contents of a tarball"}, {"port", "Lookup the public-facing port which is NAT-ed to PRIVATE_PORT"}, {"rm", "Remove containers"}, {"kill", "Kill a running container"}, @@ -401,36 +400,42 @@ func (srv *Server) CmdKill(stdin io.ReadCloser, stdout io.Writer, args ...string return nil } -func (srv *Server) CmdPull(stdin io.ReadCloser, stdout io.Writer, args ...string) error { - cmd := rcli.Subcmd(stdout, "pull", "[OPTIONS] NAME", "Download a new image from a remote location") +func (srv *Server) CmdImport(stdin io.ReadCloser, stdout io.Writer, args ...string) error { + cmd := rcli.Subcmd(stdout, "import", "[OPTIONS] NAME", "Create a new filesystem image from the contents of a tarball") + fl_stdin := cmd.Bool("stdin", false, "Read tarball from stdin") if err := cmd.Parse(args); err != nil { return nil } + var archive io.Reader name := cmd.Arg(0) if name == "" { return errors.New("Not enough arguments") } - u, err := url.Parse(name) - if err != nil { - return err - } - if u.Scheme == "" { - u.Scheme = "http" - } - // FIXME: hardcode a mirror URL that does not depend on a single provider. - if u.Host == "" { - u.Host = "s3.amazonaws.com" - u.Path = path.Join("/docker.io/images", u.Path) - } - fmt.Fprintf(stdout, "Downloading from %s\n", u.String()) - // Download with curl (pretty progress bar) - // If curl is not available, fallback to http.Get() - archive, err := future.Curl(u.String(), stdout) - if err != nil { - if resp, err := http.Get(u.String()); err != nil { + if *fl_stdin { + archive = stdin + } else { + u, err := url.Parse(name) + if err != nil { return err - } else { - archive = resp.Body + } + if u.Scheme == "" { + u.Scheme = "http" + } + // FIXME: hardcode a mirror URL that does not depend on a single provider. + if u.Host == "" { + u.Host = "s3.amazonaws.com" + u.Path = path.Join("/docker.io/images", u.Path) + } + fmt.Fprintf(stdout, "Downloading from %s\n", u.String()) + // Download with curl (pretty progress bar) + // If curl is not available, fallback to http.Get() + archive, err = future.Curl(u.String(), stdout) + if err != nil { + if resp, err := http.Get(u.String()); err != nil { + return err + } else { + archive = resp.Body + } } } fmt.Fprintf(stdout, "Unpacking to %s\n", name) @@ -442,23 +447,6 @@ func (srv *Server) CmdPull(stdin io.ReadCloser, stdout io.Writer, args ...string return nil } -func (srv *Server) CmdPut(stdin io.ReadCloser, stdout io.Writer, args ...string) error { - cmd := rcli.Subcmd(stdout, "put", "[OPTIONS] NAME", "Import a new image from a local archive.") - if err := cmd.Parse(args); err != nil { - return nil - } - name := cmd.Arg(0) - if name == "" { - return errors.New("Not enough arguments") - } - img, err := srv.images.Create(stdin, nil, name, "") - if err != nil { - return err - } - fmt.Fprintln(stdout, img.Id) - return nil -} - func (srv *Server) CmdImages(stdin io.ReadCloser, stdout io.Writer, args ...string) error { cmd := rcli.Subcmd(stdout, "images", "[OPTIONS] [NAME]", "List images") limit := cmd.Int("l", 0, "Only show the N most recent versions of each image")