github.com/portworx/docker@v1.12.1/api/client/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/api/client"
    10  	"github.com/docker/docker/cli"
    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 *client.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 *client.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.IsTerminalOut() {
    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.DisplayJSONMessagesStream(response.Body, dockerCli.Out(), dockerCli.OutFd(), dockerCli.IsTerminalOut(), nil)
    63  	}
    64  
    65  	_, err = io.Copy(dockerCli.Out(), response.Body)
    66  	return err
    67  }