github.com/ggreg80/ketos@v0.0.0-20171109040536-049616f51ddb/cmd/oplayer/pull_cmd.go (about)

     1  package oplayer
     2  
     3  import (
     4  	"github.com/opencontainers/go-digest"
     5  	"github.com/setekhid/ketos/pkg/registry"
     6  	"github.com/spf13/cobra"
     7  )
     8  
     9  var (
    10  	PullLayer = &cobra.Command{
    11  		Use:   "pull-layer",
    12  		Short: "pull-layer [--repository|-r image-name] layer-digest directory",
    13  		Args:  cobra.ExactArgs(2),
    14  
    15  		RunE: pullLayer,
    16  	}
    17  )
    18  
    19  func init() {
    20  
    21  	flags := PullLayer.Flags()
    22  	flags.StringP("repository", "r", "",
    23  		"repository name with or without tag")
    24  }
    25  
    26  func pullLayer(cmd *cobra.Command, args []string) error {
    27  
    28  	repoName, err := cmd.Flags().GetString("repository")
    29  	if err != nil {
    30  		return err
    31  	}
    32  
    33  	if len(repoName) <= 0 {
    34  		repoName, err = DefaultImageRepo()
    35  		if err != nil {
    36  			return err
    37  		}
    38  	}
    39  
    40  	digest, err := digest.Parse(args[0])
    41  	if err != nil {
    42  		return err
    43  	}
    44  
    45  	layerDirectory := args[1]
    46  
    47  	repo, _, err := registry.DockerImage(repoName).Connect()
    48  	if err != nil {
    49  		return err
    50  	}
    51  
    52  	return repo.GetLayer2Directory(digest, layerDirectory)
    53  }