github.com/vieux/docker@v0.6.3-0.20161004191708-e097c2a938c7/cli/command/image/load.go (about) 1 package image 2 3 import ( 4 "io" 5 "os" 6 7 "golang.org/x/net/context" 8 9 "github.com/docker/docker/cli" 10 "github.com/docker/docker/cli/command" 11 "github.com/docker/docker/pkg/jsonmessage" 12 "github.com/spf13/cobra" 13 ) 14 15 type loadOptions struct { 16 input string 17 quiet bool 18 } 19 20 // NewLoadCommand creates a new `docker load` command 21 func NewLoadCommand(dockerCli *command.DockerCli) *cobra.Command { 22 var opts loadOptions 23 24 cmd := &cobra.Command{ 25 Use: "load [OPTIONS]", 26 Short: "Load an image from a tar archive or STDIN", 27 Args: cli.NoArgs, 28 RunE: func(cmd *cobra.Command, args []string) error { 29 return runLoad(dockerCli, opts) 30 }, 31 } 32 33 flags := cmd.Flags() 34 35 flags.StringVarP(&opts.input, "input", "i", "", "Read from tar archive file, instead of STDIN") 36 flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Suppress the load output") 37 38 return cmd 39 } 40 41 func runLoad(dockerCli *command.DockerCli, opts loadOptions) error { 42 43 var input io.Reader = dockerCli.In() 44 if opts.input != "" { 45 file, err := os.Open(opts.input) 46 if err != nil { 47 return err 48 } 49 defer file.Close() 50 input = file 51 } 52 if !dockerCli.Out().IsTerminal() { 53 opts.quiet = true 54 } 55 response, err := dockerCli.Client().ImageLoad(context.Background(), input, opts.quiet) 56 if err != nil { 57 return err 58 } 59 defer response.Body.Close() 60 61 if response.Body != nil && response.JSON { 62 return jsonmessage.DisplayJSONMessagesToStream(response.Body, dockerCli.Out(), nil) 63 } 64 65 _, err = io.Copy(dockerCli.Out(), response.Body) 66 return err 67 }