Merge pull request #25 from tonistiigi/imagetools

imagetools: initial partial implementation
This commit is contained in:
Tõnis Tiigi
2019-04-16 21:39:07 -07:00
committed by GitHub
8 changed files with 307 additions and 9 deletions

View File

@ -0,0 +1,41 @@
package commands
import (
"github.com/docker/cli/cli/command"
"github.com/pkg/errors"
"github.com/spf13/cobra"
)
type createOptions struct {
files []string
tags []string
dryrun bool
append bool
}
func runCreate(dockerCli command.Cli, in createOptions, args []string) error {
return errors.Errorf("not-implemented")
}
func createCmd(dockerCli command.Cli) *cobra.Command {
var options createOptions
cmd := &cobra.Command{
Use: "create [OPTIONS] [SOURCE...]",
Short: "Create a new image based on source images",
RunE: func(cmd *cobra.Command, args []string) error {
return runCreate(dockerCli, options, args)
},
}
flags := cmd.Flags()
flags.StringArrayVarP(&options.files, "file", "f", []string{}, "Read source descriptor from file")
flags.StringArrayVarP(&options.tags, "tag", "t", []string{}, "Set reference for new image")
flags.BoolVar(&options.dryrun, "dry-run", false, "Show final image instead of pushing")
flags.BoolVar(&options.append, "append", false, "Append to existing manifest")
_ = flags
return cmd
}

View File

@ -0,0 +1,68 @@
package commands
import (
"fmt"
"os"
"github.com/containerd/containerd/images"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
"github.com/moby/buildkit/util/appcontext"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/spf13/cobra"
"github.com/tonistiigi/buildx/util/imagetools"
)
type inspectOptions struct {
raw bool
}
func runInspect(dockerCli command.Cli, in inspectOptions, name string) error {
ctx := appcontext.Context()
r := imagetools.New(imagetools.Opt{
Auth: dockerCli.ConfigFile(),
})
dt, desc, err := r.Get(ctx, name)
if err != nil {
return err
}
if in.raw {
fmt.Printf("%s\n", dt)
return nil
}
switch desc.MediaType {
// case images.MediaTypeDockerSchema2Manifest, specs.MediaTypeImageManifest:
// TODO: handle distribution manifest and schema1
case images.MediaTypeDockerSchema2ManifestList, ocispec.MediaTypeImageIndex:
imagetools.PrintManifestList(dt, desc, name, os.Stdout)
default:
fmt.Printf("%s\n", dt)
}
return nil
}
func inspectCmd(dockerCli command.Cli) *cobra.Command {
var options inspectOptions
cmd := &cobra.Command{
Use: "inspect [OPTIONS] NAME",
Short: "Show details of image in the registry",
Args: cli.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
return runInspect(dockerCli, options, args[0])
},
}
flags := cmd.Flags()
flags.BoolVar(&options.raw, "raw", false, "Show original JSON manifest")
_ = flags
return cmd
}

View File

@ -0,0 +1,20 @@
package commands
import (
"github.com/docker/cli/cli/command"
"github.com/spf13/cobra"
)
func RootCmd(dockerCli command.Cli) *cobra.Command {
cmd := &cobra.Command{
Use: "imagetools",
Short: "Commands to work on images in registry",
}
cmd.AddCommand(
inspectCmd(dockerCli),
createCmd(dockerCli),
)
return cmd
}

View File

@ -4,6 +4,7 @@ import (
"github.com/docker/cli/cli-plugins/plugin"
"github.com/docker/cli/cli/command"
"github.com/spf13/cobra"
imagetoolscmd "github.com/tonistiigi/buildx/commands/imagetools"
)
func NewRootCmd(name string, isPlugin bool, dockerCli command.Cli) *cobra.Command {
@ -31,5 +32,6 @@ func addCommands(cmd *cobra.Command, dockerCli command.Cli) {
useCmd(dockerCli),
inspectCmd(dockerCli),
stopCmd(dockerCli),
imagetoolscmd.RootCmd(dockerCli),
)
}