package main import ( contextpkg "context" "fmt" "os" "time" "github.com/Sirupsen/logrus" "github.com/containerd/containerd/version" "github.com/urfave/cli" ) var ( timeout time.Duration ) func init() { cli.VersionPrinter = func(c *cli.Context) { fmt.Println(c.App.Name, version.Package, c.App.Version) } } func appContext() (contextpkg.Context, contextpkg.CancelFunc) { background := contextpkg.Background() if timeout > 0 { return contextpkg.WithTimeout(background, timeout) } return contextpkg.WithCancel(background) } func main() { app := cli.NewApp() app.Name = "dist" app.Version = version.Version app.Usage = ` ___ __ ____/ (_)____/ /_ / __ / / ___/ __/ / /_/ / (__ ) /_ \__,_/_/____/\__/ distribution tool ` app.Flags = []cli.Flag{ cli.BoolFlag{ Name: "debug", Usage: "enable debug output in logs", }, cli.DurationFlag{ Name: "timeout", Usage: "total timeout for dist commands", }, cli.DurationFlag{ Name: "connect-timeout", Usage: "timeout for connecting to containerd", }, cli.StringFlag{ // TODO(stevvooe): for now, we allow circumventing the GRPC. Once // we have clear separation, this will likely go away. Name: "root", Usage: "path to content store root", Value: "/var/lib/containerd", }, cli.StringFlag{ Name: "address, a", Usage: "address for containerd's GRPC server", Value: "/run/containerd/containerd.sock", }, } app.Commands = []cli.Command{ imageCommand, contentCommand, pullCommand, fetchCommand, fetchObjectCommand, applyCommand, rootfsCommand, pushObjectCommand, } app.Before = func(context *cli.Context) error { timeout = context.GlobalDuration("timeout") if context.GlobalBool("debug") { logrus.SetLevel(logrus.DebugLevel) } return nil } if err := app.Run(os.Args); err != nil { fmt.Fprintf(os.Stderr, "dist: %s\n", err) os.Exit(1) } } var imageCommand = cli.Command{ Name: "image", Usage: "image management", Subcommands: cli.Commands{ imagesListCommand, rmiCommand, }, } var contentCommand = cli.Command{ Name: "content", Usage: "content management", Subcommands: cli.Commands{ listCommand, ingestCommand, activeCommand, getCommand, editCommand, deleteCommand, }, }