Push client support
Update dist tool to use client package Signed-off-by: Derek McGowan <derek@mcgstyle.net>
This commit is contained in:
8
cmd/dist/common.go
vendored
8
cmd/dist/common.go
vendored
@@ -13,6 +13,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/containerd/console"
|
||||
"github.com/containerd/containerd"
|
||||
contentapi "github.com/containerd/containerd/api/services/content"
|
||||
imagesapi "github.com/containerd/containerd/api/services/images"
|
||||
"github.com/containerd/containerd/content"
|
||||
@@ -47,6 +48,13 @@ var registryFlags = []cli.Flag{
|
||||
},
|
||||
}
|
||||
|
||||
func getClient(context *cli.Context) (*containerd.Client, error) {
|
||||
address := context.GlobalString("address")
|
||||
//timeout := context.GlobalDuration("connect-timeout")
|
||||
|
||||
return containerd.New(address)
|
||||
}
|
||||
|
||||
func resolveContentStore(context *cli.Context) (content.Store, error) {
|
||||
root := filepath.Join(context.GlobalString("root"), "content")
|
||||
if !filepath.IsAbs(root) {
|
||||
|
||||
53
cmd/dist/push.go
vendored
53
cmd/dist/push.go
vendored
@@ -8,6 +8,7 @@ import (
|
||||
"text/tabwriter"
|
||||
"time"
|
||||
|
||||
"github.com/containerd/containerd"
|
||||
"github.com/containerd/containerd/images"
|
||||
"github.com/containerd/containerd/log"
|
||||
"github.com/containerd/containerd/progress"
|
||||
@@ -50,12 +51,7 @@ var pushCommand = cli.Command{
|
||||
ctx, cancel := appContext()
|
||||
defer cancel()
|
||||
|
||||
cs, err := resolveContentStore(clicontext)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
imageStore, err := resolveImageStore(clicontext)
|
||||
client, err := getClient(clicontext)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -70,7 +66,7 @@ var pushCommand = cli.Command{
|
||||
if local == "" {
|
||||
local = ref
|
||||
}
|
||||
img, err := imageStore.Get(ctx, local)
|
||||
img, err := client.ImageService().Get(ctx, local)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "unable to resolve image to manifest")
|
||||
}
|
||||
@@ -86,11 +82,6 @@ var pushCommand = cli.Command{
|
||||
eg, ctx := errgroup.WithContext(ctx)
|
||||
|
||||
eg.Go(func() error {
|
||||
pusher, err := resolver.Pusher(ctx, ref)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.G(ctx).WithField("image", ref).WithField("digest", desc.Digest).Debug("pushing")
|
||||
|
||||
jobHandler := images.HandlerFunc(func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
|
||||
@@ -98,39 +89,11 @@ var pushCommand = cli.Command{
|
||||
return nil, nil
|
||||
})
|
||||
|
||||
pushHandler := remotes.PushHandler(cs, ongoing.wrapPusher(pusher))
|
||||
|
||||
var m sync.Mutex
|
||||
manifestStack := []ocispec.Descriptor{}
|
||||
|
||||
filterHandler := images.HandlerFunc(func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
|
||||
switch desc.MediaType {
|
||||
case images.MediaTypeDockerSchema2Manifest, ocispec.MediaTypeImageManifest,
|
||||
images.MediaTypeDockerSchema2ManifestList, ocispec.MediaTypeImageIndex:
|
||||
m.Lock()
|
||||
manifestStack = append(manifestStack, desc)
|
||||
m.Unlock()
|
||||
return nil, images.StopHandler
|
||||
default:
|
||||
return nil, nil
|
||||
}
|
||||
})
|
||||
|
||||
handler := images.Handlers(jobHandler, images.ChildrenHandler(cs), filterHandler, pushHandler)
|
||||
|
||||
if err := images.Dispatch(ctx, handler, desc); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Iterate in reverse order as seen, parent always uploaded after child
|
||||
for i := len(manifestStack) - 1; i >= 0; i-- {
|
||||
_, err := pushHandler(ctx, manifestStack[i])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
return client.Push(ctx, ref, desc,
|
||||
containerd.WithResolver(resolver),
|
||||
containerd.WithImageHandler(jobHandler),
|
||||
containerd.WithPushWrapper(ongoing.wrapPusher),
|
||||
)
|
||||
})
|
||||
|
||||
errs := make(chan error)
|
||||
|
||||
Reference in New Issue
Block a user