Merge pull request #1675 from crosbymichael/ctr-newclient
[ctr] streamline new client creation
This commit is contained in:
commit
04659d9405
@ -14,12 +14,11 @@ var taskAttachCommand = cli.Command{
|
||||
Usage: "attach to the IO of a running container",
|
||||
ArgsUsage: "CONTAINER",
|
||||
Action: func(context *cli.Context) error {
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
container, err := client.LoadContainer(ctx, context.Args().First())
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -19,19 +19,15 @@ var taskCheckpointCommand = cli.Command{
|
||||
},
|
||||
},
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
ctx, cancel = appContext(context)
|
||||
id = context.Args().First()
|
||||
)
|
||||
defer cancel()
|
||||
|
||||
id := context.Args().First()
|
||||
if id == "" {
|
||||
return errors.New("container id must be provided")
|
||||
}
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
container, err := client.LoadContainer(ctx, id)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -23,12 +23,11 @@ var containersDeleteCommand = cli.Command{
|
||||
},
|
||||
Action: func(context *cli.Context) error {
|
||||
var exitErr error
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
deleteOpts := []containerd.DeleteOpts{}
|
||||
if !context.Bool("keep-snapshot") {
|
||||
deleteOpts = append(deleteOpts, containerd.WithSnapshotCleanup)
|
||||
|
@ -26,16 +26,14 @@ var containersCommand = cli.Command{
|
||||
ArgsUsage: "[filter, ...]",
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
filters = context.Args()
|
||||
quiet = context.Bool("quiet")
|
||||
ctx, cancel = appContext(context)
|
||||
filters = context.Args()
|
||||
quiet = context.Bool("quiet")
|
||||
)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
containers, err := client.Containers(ctx, filters...)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -41,20 +41,16 @@ var (
|
||||
Description: "Display the image object.",
|
||||
Flags: []cli.Flag{},
|
||||
Action: func(context *cli.Context) error {
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
|
||||
dgst, err := digest.Parse(context.Args().First())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
cs := client.ContentStore()
|
||||
|
||||
ra, err := cs.ReaderAt(ctx, dgst)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -87,22 +83,18 @@ var (
|
||||
expectedSize = context.Int64("expected-size")
|
||||
expectedDigest = digest.Digest(context.String("expected-digest"))
|
||||
)
|
||||
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
|
||||
if err := expectedDigest.Validate(); expectedDigest != "" && err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if ref == "" {
|
||||
return errors.New("must specify a transaction reference")
|
||||
}
|
||||
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
|
||||
cs := client.ContentStore()
|
||||
|
||||
// TODO(stevvooe): Allow ingest to be reentrant. Currently, we expect
|
||||
@ -130,24 +122,17 @@ var (
|
||||
},
|
||||
},
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
match = context.Args().First()
|
||||
)
|
||||
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(context)
|
||||
match := context.Args().First()
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
cs := client.ContentStore()
|
||||
|
||||
active, err := cs.ListStatuses(ctx, match)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tw := tabwriter.NewWriter(os.Stdout, 1, 8, 1, '\t', 0)
|
||||
fmt.Fprintln(tw, "REF\tSIZE\tAGE\t")
|
||||
for _, active := range active {
|
||||
@ -178,13 +163,11 @@ var (
|
||||
quiet = context.Bool("quiet")
|
||||
args = []string(context.Args())
|
||||
)
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
cs := client.ContentStore()
|
||||
|
||||
var walkFn content.WalkFunc
|
||||
@ -229,16 +212,13 @@ var (
|
||||
Description: `Labels blobs in the content store`,
|
||||
Flags: []cli.Flag{},
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
object, labels = objectWithLabelArgs(context)
|
||||
)
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(context)
|
||||
object, labels := objectWithLabelArgs(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
|
||||
cs := client.ContentStore()
|
||||
|
||||
dgst, err := digest.Parse(object)
|
||||
@ -296,8 +276,6 @@ var (
|
||||
validate = context.String("validate")
|
||||
object = context.Args().First()
|
||||
)
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
|
||||
if validate != "" {
|
||||
return errors.New("validating the edit result not supported")
|
||||
@ -310,13 +288,12 @@ var (
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
cs := client.ContentStore()
|
||||
|
||||
ra, err := cs.ReaderAt(ctx, dgst)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -360,13 +337,11 @@ var (
|
||||
args = []string(context.Args())
|
||||
exitError error
|
||||
)
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
cs := client.ContentStore()
|
||||
|
||||
for _, arg := range args {
|
||||
|
@ -13,15 +13,12 @@ var eventsCommand = cli.Command{
|
||||
Name: "events",
|
||||
Usage: "display containerd events",
|
||||
Action: func(context *cli.Context) error {
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
eventsClient := client.EventService()
|
||||
|
||||
events, err := eventsClient.Subscribe(ctx, &eventsapi.SubscribeRequest{
|
||||
Filters: context.Args(),
|
||||
})
|
||||
|
@ -29,20 +29,18 @@ var taskExecCommand = cli.Command{
|
||||
},
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
ctx, cancel = appContext(context)
|
||||
id = context.Args().First()
|
||||
args = context.Args().Tail()
|
||||
tty = context.Bool("tty")
|
||||
id = context.Args().First()
|
||||
args = context.Args().Tail()
|
||||
tty = context.Bool("tty")
|
||||
)
|
||||
defer cancel()
|
||||
|
||||
if id == "" {
|
||||
return errors.New("container id must be provided")
|
||||
}
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
container, err := client.LoadContainer(ctx, id)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -32,27 +32,23 @@ var imagesExportCommand = cli.Command{
|
||||
Value: ocispec.MediaTypeImageManifest,
|
||||
},
|
||||
},
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
out = clicontext.Args().First()
|
||||
local = clicontext.Args().Get(1)
|
||||
out = context.Args().First()
|
||||
local = context.Args().Get(1)
|
||||
desc ocispec.Descriptor
|
||||
)
|
||||
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if manifest := clicontext.String("manifest"); manifest != "" {
|
||||
defer cancel()
|
||||
if manifest := context.String("manifest"); manifest != "" {
|
||||
desc.Digest, err = digest.Parse(manifest)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "invalid manifest digest")
|
||||
}
|
||||
desc.MediaType = clicontext.String("manifest-type")
|
||||
desc.MediaType = context.String("manifest-type")
|
||||
} else {
|
||||
img, err := client.ImageService().Get(ctx, local)
|
||||
if err != nil {
|
||||
@ -68,7 +64,7 @@ var imagesExportCommand = cli.Command{
|
||||
if ociRefName := determineOCIRefName(local); ociRefName != "" {
|
||||
desc.Annotations[ocispec.AnnotationRefName] = ociRefName
|
||||
}
|
||||
if ociRefName := clicontext.String("oci-ref-name"); ociRefName != "" {
|
||||
if ociRefName := context.String("oci-ref-name"); ociRefName != "" {
|
||||
desc.Annotations[ocispec.AnnotationRefName] = ociRefName
|
||||
}
|
||||
}
|
||||
|
@ -44,21 +44,19 @@ Most of this is experimental and there are few leaps to make this work.`,
|
||||
var (
|
||||
ref = clicontext.Args().First()
|
||||
)
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
_, err := fetch(ctx, ref, clicontext)
|
||||
_, err := fetch(ref, clicontext)
|
||||
return err
|
||||
},
|
||||
}
|
||||
|
||||
func fetch(ctx context.Context, ref string, clicontext *cli.Context) (containerd.Image, error) {
|
||||
client, err := newClient(clicontext)
|
||||
func fetch(ref string, cliContext *cli.Context) (containerd.Image, error) {
|
||||
client, ctx, cancel, err := newClient(cliContext)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer cancel()
|
||||
|
||||
resolver, err := getResolver(ctx, clicontext)
|
||||
resolver, err := getResolver(ctx, cliContext)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -69,7 +67,7 @@ func fetch(ctx context.Context, ref string, clicontext *cli.Context) (containerd
|
||||
progress := make(chan struct{})
|
||||
|
||||
go func() {
|
||||
if !clicontext.GlobalBool("debug") {
|
||||
if !cliContext.GlobalBool("debug") {
|
||||
// no progress bar, because it hides some debug logs
|
||||
showProgress(pctx, ongoing, client.ContentStore(), os.Stdout)
|
||||
}
|
||||
@ -84,7 +82,7 @@ func fetch(ctx context.Context, ref string, clicontext *cli.Context) (containerd
|
||||
})
|
||||
|
||||
log.G(pctx).WithField("image", ref).Debug("fetching")
|
||||
labels := labelArgs(clicontext.StringSlice("label"))
|
||||
labels := labelArgs(cliContext.StringSlice("label"))
|
||||
img, err := client.Pull(pctx, ref,
|
||||
containerd.WithPullLabels(labels),
|
||||
containerd.WithResolver(resolver),
|
||||
|
@ -41,21 +41,20 @@ var imagesListCommand = cli.Command{
|
||||
Usage: "print only the image refs",
|
||||
},
|
||||
},
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
filters = clicontext.Args()
|
||||
quiet = clicontext.Bool("quiet")
|
||||
ctx, cancel = appContext(clicontext)
|
||||
filters = context.Args()
|
||||
quiet = context.Bool("quiet")
|
||||
)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
imageStore := client.ImageService()
|
||||
cs := client.ContentStore()
|
||||
defer cancel()
|
||||
var (
|
||||
imageStore = client.ImageService()
|
||||
cs = client.ContentStore()
|
||||
)
|
||||
imageList, err := imageStore.List(ctx, filters...)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to list images")
|
||||
@ -125,19 +124,16 @@ var imagesSetLabelsCommand = cli.Command{
|
||||
Usage: "replace all labels",
|
||||
},
|
||||
},
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
ctx, cancel = appContext(clicontext)
|
||||
replaceAll = clicontext.Bool("replace-all")
|
||||
name, labels = objectWithLabelArgs(clicontext)
|
||||
replaceAll = context.Bool("replace-all")
|
||||
name, labels = objectWithLabelArgs(context)
|
||||
)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer cancel()
|
||||
if name == "" {
|
||||
return errors.New("please specify an image")
|
||||
}
|
||||
@ -182,25 +178,23 @@ var imagesCheckCommand = cli.Command{
|
||||
ArgsUsage: "[flags] <ref> [<ref>, ...]",
|
||||
Description: "Check that an image has all content available locally.",
|
||||
Flags: []cli.Flag{},
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
exitErr error
|
||||
)
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
imageStore := client.ImageService()
|
||||
contentStore := client.ContentStore()
|
||||
|
||||
tw := tabwriter.NewWriter(os.Stdout, 1, 8, 1, ' ', 0)
|
||||
defer cancel()
|
||||
var (
|
||||
imageStore = client.ImageService()
|
||||
contentStore = client.ContentStore()
|
||||
tw = tabwriter.NewWriter(os.Stdout, 1, 8, 1, ' ', 0)
|
||||
)
|
||||
fmt.Fprintln(tw, "REF\tTYPE\tDIGEST\tSTATUS\tSIZE\t")
|
||||
|
||||
args := []string(clicontext.Args())
|
||||
args := []string(context.Args())
|
||||
imageList, err := imageStore.List(ctx, args...)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed listing images")
|
||||
@ -267,21 +261,17 @@ var imageRemoveCommand = cli.Command{
|
||||
ArgsUsage: "[flags] <ref> [<ref>, ...]",
|
||||
Description: `Remove one or more images by reference.`,
|
||||
Flags: []cli.Flag{},
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
var (
|
||||
exitErr error
|
||||
)
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
Action: func(context *cli.Context) error {
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
imageStore := client.ImageService()
|
||||
|
||||
for _, target := range clicontext.Args() {
|
||||
defer cancel()
|
||||
var (
|
||||
exitErr error
|
||||
imageStore = client.ImageService()
|
||||
)
|
||||
for _, target := range context.Args() {
|
||||
if err := imageStore.Delete(ctx, target); err != nil {
|
||||
if !errdefs.IsNotFound(err) {
|
||||
if exitErr == nil {
|
||||
|
@ -23,22 +23,18 @@ var imagesImportCommand = cli.Command{
|
||||
},
|
||||
labelFlag,
|
||||
},
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
ref = clicontext.Args().First()
|
||||
in = clicontext.Args().Get(1)
|
||||
refObject = clicontext.String("ref-object")
|
||||
labels = labelArgs(clicontext.StringSlice("label"))
|
||||
ref = context.Args().First()
|
||||
in = context.Args().Get(1)
|
||||
refObject = context.String("ref-object")
|
||||
labels = labelArgs(context.StringSlice("label"))
|
||||
)
|
||||
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer cancel()
|
||||
var r io.ReadCloser
|
||||
if in == "-" {
|
||||
r = os.Stdin
|
||||
@ -65,7 +61,7 @@ var imagesImportCommand = cli.Command{
|
||||
|
||||
// TODO: Show unpack status
|
||||
fmt.Printf("unpacking %s...", img.Target().Digest)
|
||||
err = img.Unpack(ctx, clicontext.String("snapshotter"))
|
||||
err = img.Unpack(ctx, context.String("snapshotter"))
|
||||
fmt.Println("done")
|
||||
return err
|
||||
},
|
||||
|
@ -10,24 +10,19 @@ var containerInfoCommand = cli.Command{
|
||||
Usage: "get info about a container",
|
||||
ArgsUsage: "CONTAINER",
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
ctx, cancel = appContext(context)
|
||||
id = context.Args().First()
|
||||
)
|
||||
defer cancel()
|
||||
id := context.Args().First()
|
||||
if id == "" {
|
||||
return errors.New("container id must be provided")
|
||||
}
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer cancel()
|
||||
container, err := client.LoadContainer(ctx, id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
info, err := container.Info(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -26,11 +26,7 @@ var taskKillCommand = cli.Command{
|
||||
},
|
||||
},
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
id = context.Args().First()
|
||||
ctx, cancel = appContext(context)
|
||||
)
|
||||
defer cancel()
|
||||
id := context.Args().First()
|
||||
if id == "" {
|
||||
return errors.New("container id must be provided")
|
||||
}
|
||||
@ -45,10 +41,11 @@ var taskKillCommand = cli.Command{
|
||||
if pid > 0 && all {
|
||||
return errors.New("enter a pid or all; not both")
|
||||
}
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
container, err := client.LoadContainer(ctx, id)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -14,21 +14,16 @@ var containersSetLabelsCommand = cli.Command{
|
||||
ArgsUsage: "[flags] <name> [<key>=<value>, ...]",
|
||||
Description: "Set and clear labels for a container.",
|
||||
Flags: []cli.Flag{},
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
var (
|
||||
ctx, cancel = appContext(clicontext)
|
||||
containerID, labels = objectWithLabelArgs(clicontext)
|
||||
)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Action: func(context *cli.Context) error {
|
||||
containerID, labels := objectWithLabelArgs(context)
|
||||
if containerID == "" {
|
||||
return errors.New("please specify a container")
|
||||
}
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
|
||||
container, err := client.LoadContainer(ctx, containerID)
|
||||
if err != nil {
|
||||
|
@ -1,7 +1,6 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"sort"
|
||||
@ -30,20 +29,16 @@ var namespacesCreateCommand = cli.Command{
|
||||
Usage: "create a new namespace.",
|
||||
ArgsUsage: "[flags] <name> [<key>=<value]",
|
||||
Description: "Create a new namespace. It must be unique.",
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
var (
|
||||
ctx = context.Background()
|
||||
namespace, labels = objectWithLabelArgs(clicontext)
|
||||
)
|
||||
|
||||
Action: func(context *cli.Context) error {
|
||||
namespace, labels := objectWithLabelArgs(context)
|
||||
if namespace == "" {
|
||||
return errors.New("please specify a namespace")
|
||||
}
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
namespaces := client.NamespaceService()
|
||||
return namespaces.Create(ctx, namespace, labels)
|
||||
},
|
||||
@ -55,28 +50,22 @@ var namespacesSetLabelsCommand = cli.Command{
|
||||
ArgsUsage: "[flags] <name> [<key>=<value>, ...]",
|
||||
Description: "Set and clear labels for a namespace.",
|
||||
Flags: []cli.Flag{},
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
var (
|
||||
ctx = context.Background()
|
||||
namespace, labels = objectWithLabelArgs(clicontext)
|
||||
)
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
namespaces := client.NamespaceService()
|
||||
|
||||
Action: func(context *cli.Context) error {
|
||||
namespace, labels := objectWithLabelArgs(context)
|
||||
if namespace == "" {
|
||||
return errors.New("please specify a namespace")
|
||||
}
|
||||
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
namespaces := client.NamespaceService()
|
||||
for k, v := range labels {
|
||||
if err := namespaces.SetLabel(ctx, namespace, k, v); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
@ -93,18 +82,14 @@ var namespacesListCommand = cli.Command{
|
||||
Usage: "print only the namespace name.",
|
||||
},
|
||||
},
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
var (
|
||||
ctx = context.Background()
|
||||
quiet = clicontext.Bool("quiet")
|
||||
)
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
Action: func(context *cli.Context) error {
|
||||
quiet := context.Bool("quiet")
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
namespaces := client.NamespaceService()
|
||||
|
||||
nss, err := namespaces.List(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -114,30 +99,26 @@ var namespacesListCommand = cli.Command{
|
||||
for _, ns := range nss {
|
||||
fmt.Println(ns)
|
||||
}
|
||||
} else {
|
||||
|
||||
tw := tabwriter.NewWriter(os.Stdout, 1, 8, 1, ' ', 0)
|
||||
fmt.Fprintln(tw, "NAME\tLABELS\t")
|
||||
|
||||
for _, ns := range nss {
|
||||
labels, err := namespaces.Labels(ctx, ns)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var labelStrings []string
|
||||
for k, v := range labels {
|
||||
labelStrings = append(labelStrings, strings.Join([]string{k, v}, "="))
|
||||
}
|
||||
sort.Strings(labelStrings)
|
||||
|
||||
fmt.Fprintf(tw, "%v\t%v\t\n", ns, strings.Join(labelStrings, ","))
|
||||
}
|
||||
|
||||
return tw.Flush()
|
||||
return nil
|
||||
}
|
||||
|
||||
return nil
|
||||
tw := tabwriter.NewWriter(os.Stdout, 1, 8, 1, ' ', 0)
|
||||
fmt.Fprintln(tw, "NAME\tLABELS\t")
|
||||
for _, ns := range nss {
|
||||
labels, err := namespaces.Labels(ctx, ns)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var labelStrings []string
|
||||
for k, v := range labels {
|
||||
labelStrings = append(labelStrings, strings.Join([]string{k, v}, "="))
|
||||
}
|
||||
sort.Strings(labelStrings)
|
||||
|
||||
fmt.Fprintf(tw, "%v\t%v\t\n", ns, strings.Join(labelStrings, ","))
|
||||
}
|
||||
return tw.Flush()
|
||||
},
|
||||
}
|
||||
|
||||
@ -147,19 +128,15 @@ var namespacesRemoveCommand = cli.Command{
|
||||
Usage: "remove one or more namespaces",
|
||||
ArgsUsage: "[flags] <name> [<name>, ...]",
|
||||
Description: "Remove one or more namespaces. For now, the namespace must be empty.",
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
var (
|
||||
ctx = context.Background()
|
||||
exitErr error
|
||||
)
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
Action: func(context *cli.Context) error {
|
||||
var exitErr error
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
namespaces := client.NamespaceService()
|
||||
|
||||
for _, target := range clicontext.Args() {
|
||||
for _, target := range context.Args() {
|
||||
if err := namespaces.Delete(ctx, target); err != nil {
|
||||
if !errdefs.IsNotFound(err) {
|
||||
if exitErr == nil {
|
||||
@ -173,8 +150,6 @@ var namespacesRemoveCommand = cli.Command{
|
||||
|
||||
fmt.Println(target)
|
||||
}
|
||||
|
||||
return exitErr
|
||||
|
||||
},
|
||||
}
|
||||
|
@ -7,13 +7,11 @@ var taskPauseCommand = cli.Command{
|
||||
Usage: "pause an existing container",
|
||||
ArgsUsage: "CONTAINER",
|
||||
Action: func(context *cli.Context) error {
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
container, err := client.LoadContainer(ctx, context.Args().First())
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -30,16 +30,14 @@ var pluginsCommand = cli.Command{
|
||||
},
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
quiet = context.Bool("quiet")
|
||||
detailed = context.Bool("detailed")
|
||||
ctx, cancel = appContext(context)
|
||||
quiet = context.Bool("quiet")
|
||||
detailed = context.Bool("detailed")
|
||||
)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
ps := client.IntrospectionService()
|
||||
response, err := ps.Plugins(ctx, &introspection.PluginsRequest{
|
||||
Filters: context.Args(),
|
||||
|
@ -15,19 +15,15 @@ var taskPsCommand = cli.Command{
|
||||
Usage: "list processes for container",
|
||||
ArgsUsage: "CONTAINER",
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
id = context.Args().First()
|
||||
ctx, cancel = appContext(context)
|
||||
)
|
||||
defer cancel()
|
||||
|
||||
id := context.Args().First()
|
||||
if id == "" {
|
||||
return errors.New("container id must be provided")
|
||||
}
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
container, err := client.LoadContainer(ctx, id)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -21,15 +21,15 @@ command. As part of this process, we do the following:
|
||||
3. Register metadata for the image.
|
||||
`,
|
||||
Flags: append(registryFlags, append(snapshotterFlags, labelFlag)...),
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
ref = clicontext.Args().First()
|
||||
ref = context.Args().First()
|
||||
)
|
||||
|
||||
ctx, cancel := appContext(clicontext)
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
|
||||
img, err := fetch(ctx, ref, clicontext)
|
||||
img, err := fetch(ref, context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -38,7 +38,7 @@ command. As part of this process, we do the following:
|
||||
|
||||
// TODO: Show unpack status
|
||||
fmt.Printf("unpacking %s...\n", img.Target().Digest)
|
||||
err = img.Unpack(ctx, clicontext.String("snapshotter"))
|
||||
err = img.Unpack(ctx, context.String("snapshotter"))
|
||||
if err == nil {
|
||||
fmt.Println("done")
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
gocontext "context"
|
||||
"os"
|
||||
"sync"
|
||||
"text/tabwriter"
|
||||
@ -45,27 +45,23 @@ var pushCommand = cli.Command{
|
||||
Usage: "media type of manifest digest",
|
||||
Value: ocispec.MediaTypeImageManifest,
|
||||
}),
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
ref = clicontext.Args().First()
|
||||
local = clicontext.Args().Get(1)
|
||||
ref = context.Args().First()
|
||||
local = context.Args().Get(1)
|
||||
desc ocispec.Descriptor
|
||||
)
|
||||
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if manifest := clicontext.String("manifest"); manifest != "" {
|
||||
defer cancel()
|
||||
if manifest := context.String("manifest"); manifest != "" {
|
||||
desc.Digest, err = digest.Parse(manifest)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "invalid manifest digest")
|
||||
}
|
||||
desc.MediaType = clicontext.String("manifest-type")
|
||||
desc.MediaType = context.String("manifest-type")
|
||||
} else {
|
||||
if local == "" {
|
||||
local = ref
|
||||
@ -77,7 +73,7 @@ var pushCommand = cli.Command{
|
||||
desc = img.Target
|
||||
}
|
||||
|
||||
resolver, err := getResolver(ctx, clicontext)
|
||||
resolver, err := getResolver(ctx, context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -88,7 +84,7 @@ var pushCommand = cli.Command{
|
||||
eg.Go(func() error {
|
||||
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) {
|
||||
jobHandler := images.HandlerFunc(func(ctx gocontext.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
|
||||
ongoing.add(remotes.MakeRefKey(ctx, desc))
|
||||
return nil, nil
|
||||
})
|
||||
|
@ -16,21 +16,23 @@ var pushObjectCommand = cli.Command{
|
||||
ArgsUsage: "[flags] <remote> <object> <type>",
|
||||
Description: `Push objects by identifier to a remote.`,
|
||||
Flags: registryFlags,
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
ref = clicontext.Args().Get(0)
|
||||
object = clicontext.Args().Get(1)
|
||||
media = clicontext.Args().Get(2)
|
||||
ref = context.Args().Get(0)
|
||||
object = context.Args().Get(1)
|
||||
media = context.Args().Get(2)
|
||||
)
|
||||
dgst, err := digest.Parse(object)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ctx, cancel := appContext(clicontext)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
|
||||
resolver, err := getResolver(ctx, clicontext)
|
||||
resolver, err := getResolver(ctx, context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -43,10 +45,6 @@ var pushObjectCommand = cli.Command{
|
||||
return err
|
||||
}
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
cs := client.ContentStore()
|
||||
|
||||
info, err := cs.Info(ctx, dgst)
|
||||
|
@ -7,13 +7,11 @@ var taskResumeCommand = cli.Command{
|
||||
Usage: "resume a paused container",
|
||||
ArgsUsage: "CONTAINER",
|
||||
Action: func(context *cli.Context) error {
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
container, err := client.LoadContainer(ctx, context.Args().First())
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -22,34 +22,27 @@ var rootfsUnpackCommand = cli.Command{
|
||||
Usage: "unpack applies layers from a manifest to a snapshot",
|
||||
ArgsUsage: "[flags] <digest>",
|
||||
Flags: snapshotterFlags,
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
ctx, cancel := appContext(clicontext)
|
||||
Action: func(context *cli.Context) error {
|
||||
dgst, err := digest.Parse(context.Args().First())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
|
||||
dgst, err := digest.Parse(clicontext.Args().First())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.G(ctx).Debugf("unpacking layers from manifest %s", dgst.String())
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// TODO: Support unpack by name
|
||||
|
||||
images, err := client.ListImages(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var unpacked bool
|
||||
for _, image := range images {
|
||||
if image.Target().Digest == dgst {
|
||||
fmt.Printf("unpacking %s (%s)...", dgst, image.Target().MediaType)
|
||||
if err := image.Unpack(ctx, clicontext.String("snapshotter")); err != nil {
|
||||
if err := image.Unpack(ctx, context.String("snapshotter")); err != nil {
|
||||
fmt.Println()
|
||||
return err
|
||||
}
|
||||
@ -61,10 +54,8 @@ var rootfsUnpackCommand = cli.Command{
|
||||
if !unpacked {
|
||||
return errors.New("manifest not found")
|
||||
}
|
||||
|
||||
// TODO: Get rootfs from Image
|
||||
//log.G(ctx).Infof("chain ID: %s", chainID.String())
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
@ -105,13 +105,11 @@ var runCommand = cli.Command{
|
||||
var (
|
||||
err error
|
||||
|
||||
ctx, cancel = appContext(context)
|
||||
id = context.Args().Get(1)
|
||||
imageRef = context.Args().First()
|
||||
tty = context.Bool("tty")
|
||||
detach = context.Bool("detach")
|
||||
id = context.Args().Get(1)
|
||||
imageRef = context.Args().First()
|
||||
tty = context.Bool("tty")
|
||||
detach = context.Bool("detach")
|
||||
)
|
||||
defer cancel()
|
||||
|
||||
if imageRef == "" {
|
||||
return errors.New("image ref must be provided")
|
||||
@ -119,10 +117,11 @@ var runCommand = cli.Command{
|
||||
if id == "" {
|
||||
return errors.New("container id must be provided")
|
||||
}
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
container, err := newContainer(ctx, client, context)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -1,7 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
gocontext "context"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
@ -36,20 +36,18 @@ var listSnapshotCommand = cli.Command{
|
||||
Name: "list",
|
||||
Aliases: []string{"ls"},
|
||||
Usage: "list snapshots",
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
Action: func(context *cli.Context) error {
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
snapshotter := client.SnapshotService(clicontext.GlobalString("snapshotter"))
|
||||
|
||||
tw := tabwriter.NewWriter(os.Stdout, 1, 8, 1, ' ', 0)
|
||||
defer cancel()
|
||||
var (
|
||||
snapshotter = client.SnapshotService(context.GlobalString("snapshotter"))
|
||||
tw = tabwriter.NewWriter(os.Stdout, 1, 8, 1, ' ', 0)
|
||||
)
|
||||
fmt.Fprintln(tw, "KEY\tPARENT\tKIND\t")
|
||||
|
||||
if err := snapshotter.Walk(ctx, func(ctx context.Context, info snapshot.Info) error {
|
||||
if err := snapshotter.Walk(ctx, func(ctx gocontext.Context, info snapshot.Info) error {
|
||||
fmt.Fprintf(tw, "%v\t%v\t%v\t\n",
|
||||
info.Name,
|
||||
info.Parent,
|
||||
@ -73,12 +71,9 @@ var usageSnapshotCommand = cli.Command{
|
||||
Usage: "display size in bytes",
|
||||
},
|
||||
},
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
Action: func(context *cli.Context) error {
|
||||
var displaySize func(int64) string
|
||||
if clicontext.Bool("b") {
|
||||
if context.Bool("b") {
|
||||
displaySize = func(s int64) string {
|
||||
return fmt.Sprintf("%d", s)
|
||||
}
|
||||
@ -87,18 +82,18 @@ var usageSnapshotCommand = cli.Command{
|
||||
return progress.Bytes(s).String()
|
||||
}
|
||||
}
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
snapshotter := client.SnapshotService(clicontext.GlobalString("snapshotter"))
|
||||
|
||||
tw := tabwriter.NewWriter(os.Stdout, 1, 8, 1, ' ', 0)
|
||||
defer cancel()
|
||||
var (
|
||||
snapshotter = client.SnapshotService(context.GlobalString("snapshotter"))
|
||||
tw = tabwriter.NewWriter(os.Stdout, 1, 8, 1, ' ', 0)
|
||||
)
|
||||
fmt.Fprintln(tw, "KEY\tSIZE\tINODES\t")
|
||||
|
||||
if clicontext.NArg() == 0 {
|
||||
if err := snapshotter.Walk(ctx, func(ctx context.Context, info snapshot.Info) error {
|
||||
if context.NArg() == 0 {
|
||||
if err := snapshotter.Walk(ctx, func(ctx gocontext.Context, info snapshot.Info) error {
|
||||
usage, err := snapshotter.Usage(ctx, info.Name)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -109,7 +104,7 @@ var usageSnapshotCommand = cli.Command{
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
for _, id := range clicontext.Args() {
|
||||
for _, id := range context.Args() {
|
||||
usage, err := snapshotter.Usage(ctx, id)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -127,17 +122,14 @@ var removeSnapshotCommand = cli.Command{
|
||||
Aliases: []string{"rm"},
|
||||
ArgsUsage: "<key> [<key>, ...]",
|
||||
Usage: "remove snapshots",
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
Action: func(context *cli.Context) error {
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
snapshotter := client.SnapshotService(clicontext.GlobalString("snapshotter"))
|
||||
|
||||
for _, key := range clicontext.Args() {
|
||||
defer cancel()
|
||||
snapshotter := client.SnapshotService(context.GlobalString("snapshotter"))
|
||||
for _, key := range context.Args() {
|
||||
err = snapshotter.Remove(ctx, key)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "failed to remove %q", key)
|
||||
@ -158,24 +150,22 @@ var prepareSnapshotCommand = cli.Command{
|
||||
Usage: "mount target path, will print mount, if provided",
|
||||
},
|
||||
},
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
if clicontext.NArg() != 2 {
|
||||
return cli.ShowSubcommandHelp(clicontext)
|
||||
Action: func(context *cli.Context) error {
|
||||
if context.NArg() != 2 {
|
||||
return cli.ShowSubcommandHelp(context)
|
||||
}
|
||||
|
||||
target := clicontext.String("target")
|
||||
key := clicontext.Args().Get(0)
|
||||
parent := clicontext.Args().Get(1)
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
var (
|
||||
target = context.String("target")
|
||||
key = context.Args().Get(0)
|
||||
parent = context.Args().Get(1)
|
||||
)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
snapshotter := client.SnapshotService(clicontext.GlobalString("snapshotter"))
|
||||
defer cancel()
|
||||
|
||||
snapshotter := client.SnapshotService(context.GlobalString("snapshotter"))
|
||||
mounts, err := snapshotter.Prepare(ctx, key, parent)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -199,24 +189,22 @@ var viewSnapshotCommand = cli.Command{
|
||||
Usage: "mount target path, will print mount, if provided",
|
||||
},
|
||||
},
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
if clicontext.NArg() != 2 {
|
||||
return cli.ShowSubcommandHelp(clicontext)
|
||||
Action: func(context *cli.Context) error {
|
||||
if context.NArg() != 2 {
|
||||
return cli.ShowSubcommandHelp(context)
|
||||
}
|
||||
|
||||
target := clicontext.String("target")
|
||||
key := clicontext.Args().Get(0)
|
||||
parent := clicontext.Args().Get(1)
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
var (
|
||||
target = context.String("target")
|
||||
key = context.Args().Get(0)
|
||||
parent = context.Args().Get(1)
|
||||
)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
snapshotter := client.SnapshotService(clicontext.GlobalString("snapshotter"))
|
||||
defer cancel()
|
||||
|
||||
snapshotter := client.SnapshotService(context.GlobalString("snapshotter"))
|
||||
mounts, err := snapshotter.View(ctx, key, parent)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -235,22 +223,20 @@ var mountSnapshotCommand = cli.Command{
|
||||
Aliases: []string{"m", "mount"},
|
||||
Usage: "mount gets mount commands for the snapshots",
|
||||
ArgsUsage: "[flags] <target> <key>",
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
if clicontext.NArg() != 2 {
|
||||
return cli.ShowSubcommandHelp(clicontext)
|
||||
Action: func(context *cli.Context) error {
|
||||
if context.NArg() != 2 {
|
||||
return cli.ShowSubcommandHelp(context)
|
||||
}
|
||||
|
||||
target := clicontext.Args().Get(0)
|
||||
key := clicontext.Args().Get(1)
|
||||
client, err := newClient(clicontext)
|
||||
var (
|
||||
target = context.Args().Get(0)
|
||||
key = context.Args().Get(1)
|
||||
)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
snapshotter := client.SnapshotService(clicontext.GlobalString("snapshotter"))
|
||||
|
||||
defer cancel()
|
||||
snapshotter := client.SnapshotService(context.GlobalString("snapshotter"))
|
||||
mounts, err := snapshotter.Mounts(ctx, key)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -266,23 +252,20 @@ var commitSnapshotCommand = cli.Command{
|
||||
Name: "commit",
|
||||
Usage: "commit an active snapshot into the provided name",
|
||||
ArgsUsage: "[flags] <key> <active>",
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
if clicontext.NArg() != 2 {
|
||||
return cli.ShowSubcommandHelp(clicontext)
|
||||
Action: func(context *cli.Context) error {
|
||||
if context.NArg() != 2 {
|
||||
return cli.ShowSubcommandHelp(context)
|
||||
}
|
||||
|
||||
key := clicontext.Args().Get(0)
|
||||
active := clicontext.Args().Get(1)
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
var (
|
||||
key = context.Args().Get(0)
|
||||
active = context.Args().Get(1)
|
||||
)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
snapshotter := client.SnapshotService(clicontext.GlobalString("snapshotter"))
|
||||
|
||||
defer cancel()
|
||||
snapshotter := client.SnapshotService(context.GlobalString("snapshotter"))
|
||||
return snapshotter.Commit(ctx, key, active)
|
||||
},
|
||||
}
|
||||
@ -290,19 +273,18 @@ var commitSnapshotCommand = cli.Command{
|
||||
var treeSnapshotCommand = cli.Command{
|
||||
Name: "tree",
|
||||
Usage: "display tree view of snapshot branches",
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
Action: func(context *cli.Context) error {
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
snapshotter := client.SnapshotService(clicontext.GlobalString("snapshotter"))
|
||||
defer cancel()
|
||||
var (
|
||||
snapshotter = client.SnapshotService(context.GlobalString("snapshotter"))
|
||||
tree = make(map[string]*snapshotTreeNode)
|
||||
)
|
||||
|
||||
tree := make(map[string]*snapshotTreeNode)
|
||||
|
||||
if err := snapshotter.Walk(ctx, func(ctx context.Context, info snapshot.Info) error {
|
||||
if err := snapshotter.Walk(ctx, func(ctx gocontext.Context, info snapshot.Info) error {
|
||||
// Get or create node and add node details
|
||||
node := getOrCreateTreeNode(info.Name, tree)
|
||||
if info.Parent != "" {
|
||||
@ -326,22 +308,18 @@ var infoSnapshotCommand = cli.Command{
|
||||
Name: "info",
|
||||
Usage: "get info about a snapshot",
|
||||
ArgsUsage: "<key>",
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
if clicontext.NArg() != 1 {
|
||||
return cli.ShowSubcommandHelp(clicontext)
|
||||
Action: func(context *cli.Context) error {
|
||||
if context.NArg() != 1 {
|
||||
return cli.ShowSubcommandHelp(context)
|
||||
}
|
||||
|
||||
key := clicontext.Args().Get(0)
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
key := context.Args().Get(0)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
snapshotter := client.SnapshotService(clicontext.GlobalString("snapshotter"))
|
||||
|
||||
defer cancel()
|
||||
snapshotter := client.SnapshotService(context.GlobalString("snapshotter"))
|
||||
info, err := snapshotter.Stat(ctx, key)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -359,18 +337,15 @@ var labelSnapshotCommand = cli.Command{
|
||||
ArgsUsage: "[flags] <name> [<label>=<value> ...]",
|
||||
Description: `Labels snapshots in the snapshotter`,
|
||||
Flags: []cli.Flag{},
|
||||
Action: func(clicontext *cli.Context) error {
|
||||
var (
|
||||
key, labels = objectWithLabelArgs(clicontext)
|
||||
)
|
||||
ctx, cancel := appContext(clicontext)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(clicontext)
|
||||
Action: func(context *cli.Context) error {
|
||||
key, labels := objectWithLabelArgs(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
snapshotter := client.SnapshotService(clicontext.GlobalString("snapshotter"))
|
||||
defer cancel()
|
||||
|
||||
snapshotter := client.SnapshotService(context.GlobalString("snapshotter"))
|
||||
|
||||
info := snapshot.Info{
|
||||
Name: key,
|
||||
|
@ -20,20 +20,16 @@ var taskStartCommand = cli.Command{
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
err error
|
||||
|
||||
ctx, cancel = appContext(context)
|
||||
id = context.Args().Get(0)
|
||||
id = context.Args().Get(0)
|
||||
)
|
||||
|
||||
defer cancel()
|
||||
|
||||
if id == "" {
|
||||
return errors.New("container id must be provided")
|
||||
}
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
container, err := client.LoadContainer(ctx, id)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -31,16 +31,12 @@ var tasksCommand = cli.Command{
|
||||
taskDeleteCommand,
|
||||
},
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
quiet = context.Bool("quiet")
|
||||
ctx, cancel = appContext(context)
|
||||
)
|
||||
defer cancel()
|
||||
|
||||
client, err := newClient(context)
|
||||
quiet := context.Bool("quiet")
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
s := client.TaskService()
|
||||
response, err := s.List(ctx, &tasks.ListTasksRequest{})
|
||||
if err != nil {
|
||||
|
@ -7,12 +7,11 @@ var taskDeleteCommand = cli.Command{
|
||||
Usage: "delete a task",
|
||||
ArgsUsage: "CONTAINER",
|
||||
Action: func(context *cli.Context) error {
|
||||
ctx, cancel := appContext(context)
|
||||
defer cancel()
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer cancel()
|
||||
container, err := client.LoadContainer(ctx, context.Args().First())
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -90,8 +90,13 @@ func appContext(clicontext *cli.Context) (gocontext.Context, gocontext.CancelFun
|
||||
return ctx, cancel
|
||||
}
|
||||
|
||||
func newClient(context *cli.Context) (*containerd.Client, error) {
|
||||
return containerd.New(context.GlobalString("address"))
|
||||
func newClient(context *cli.Context) (*containerd.Client, gocontext.Context, gocontext.CancelFunc, error) {
|
||||
client, err := containerd.New(context.GlobalString("address"))
|
||||
if err != nil {
|
||||
return nil, nil, nil, err
|
||||
}
|
||||
ctx, cancel := appContext(context)
|
||||
return client, ctx, cancel, nil
|
||||
}
|
||||
|
||||
func passwordPrompt() (string, error) {
|
||||
|
@ -1,7 +1,6 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
gocontext "context"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
@ -20,11 +19,12 @@ var versionCommand = cli.Command{
|
||||
fmt.Printf(" Version: %s\n", version.Version)
|
||||
fmt.Printf(" Revision: %s\n", version.Revision)
|
||||
fmt.Println("")
|
||||
client, err := newClient(context)
|
||||
client, ctx, cancel, err := newClient(context)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
v, err := client.Version(gocontext.Background())
|
||||
defer cancel()
|
||||
v, err := client.Version(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user