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

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