From 00a99c0472642f053ac5d24f2467fac872c3d2d3 Mon Sep 17 00:00:00 2001 From: Derek McGowan Date: Tue, 17 Jul 2018 10:18:57 -0700 Subject: [PATCH] Add leases subcommand in ctr Signed-off-by: Derek McGowan --- cmd/ctr/app/main.go | 2 + cmd/ctr/commands/leases/leases.go | 190 ++++++++++++++++++++++++++++++ 2 files changed, 192 insertions(+) create mode 100644 cmd/ctr/commands/leases/leases.go diff --git a/cmd/ctr/app/main.go b/cmd/ctr/app/main.go index ac91d038c..37ecf8707 100644 --- a/cmd/ctr/app/main.go +++ b/cmd/ctr/app/main.go @@ -24,6 +24,7 @@ import ( "github.com/containerd/containerd/cmd/ctr/commands/content" "github.com/containerd/containerd/cmd/ctr/commands/events" "github.com/containerd/containerd/cmd/ctr/commands/images" + "github.com/containerd/containerd/cmd/ctr/commands/leases" namespacesCmd "github.com/containerd/containerd/cmd/ctr/commands/namespaces" "github.com/containerd/containerd/cmd/ctr/commands/plugins" "github.com/containerd/containerd/cmd/ctr/commands/pprof" @@ -96,6 +97,7 @@ containerd CLI content.Command, events.Command, images.Command, + leases.Command, namespacesCmd.Command, pprof.Command, run.Command, diff --git a/cmd/ctr/commands/leases/leases.go b/cmd/ctr/commands/leases/leases.go new file mode 100644 index 000000000..a95776762 --- /dev/null +++ b/cmd/ctr/commands/leases/leases.go @@ -0,0 +1,190 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package leases + +import ( + "fmt" + "os" + "sort" + "strings" + "text/tabwriter" + "time" + + "github.com/containerd/containerd/cmd/ctr/commands" + "github.com/containerd/containerd/leases" + "github.com/pkg/errors" + "github.com/urfave/cli" +) + +// Command is the cli command for managing content +var Command = cli.Command{ + Name: "leases", + Usage: "manage leases", + Subcommands: cli.Commands{ + listCommand, + createCommand, + deleteCommand, + }, +} + +var listCommand = cli.Command{ + + Name: "list", + Aliases: []string{"ls"}, + Usage: "list all active leases", + ArgsUsage: "[flags] ", + Description: "list active leases by containerd", + Flags: []cli.Flag{ + cli.BoolFlag{ + Name: "quiet, q", + Usage: "print only the blob digest", + }, + }, + Action: func(context *cli.Context) error { + var ( + filters = context.Args() + quiet = context.Bool("quiet") + ) + client, ctx, cancel, err := commands.NewClient(context) + if err != nil { + return err + } + defer cancel() + + ls := client.LeasesService() + + leaseList, err := ls.List(ctx, filters...) + if err != nil { + return errors.Wrap(err, "failed to list leases") + } + if quiet { + for _, l := range leaseList { + fmt.Println(l.ID) + } + return nil + } + tw := tabwriter.NewWriter(os.Stdout, 1, 8, 1, ' ', 0) + fmt.Fprintln(tw, "ID\tCREATED AT\tLABELS\t") + for _, l := range leaseList { + labels := "-" + if len(l.Labels) > 0 { + var pairs []string + for k, v := range l.Labels { + pairs = append(pairs, fmt.Sprintf("%v=%v", k, v)) + } + sort.Strings(pairs) + labels = strings.Join(pairs, ",") + } + + fmt.Fprintf(tw, "%v\t%v\t%s\t\n", + l.ID, + l.CreatedAt.Local().Format(time.RFC3339), + labels) + } + + return tw.Flush() + }, +} + +var createCommand = cli.Command{ + Name: "create", + Usage: "create lease", + ArgsUsage: "[flags]