Convert CLI to urfave v2

Followed the Migration Guide at https://cli.urfave.org/migrate-v1-to-v2/
The major changes not pointed out in the migration guide are:
- context.Args() no longer produces a []slice, so context.Args().Slice()
  in substitued
- All cli.Global***** are deprecated (the migration guide is somewhat
  unclear on this)

Signed-off-by: Derek Nola <derek.nola@suse.com>

Vendor in urfave cli/v2

Signed-off-by: Derek Nola <derek.nola@suse.com>

Fix NewStringSlice calls

Signed-off-by: Derek Nola <derek.nola@suse.com>
This commit is contained in:
Derek Nola
2024-02-12 10:51:13 -08:00
parent d4d228926c
commit 132485adb0
149 changed files with 11041 additions and 4693 deletions

View File

@@ -34,14 +34,14 @@ import (
"github.com/containerd/containerd/v2/pkg/namespaces"
"github.com/containerd/containerd/v2/pkg/oci"
"github.com/containerd/log"
"github.com/urfave/cli"
"github.com/urfave/cli/v2"
)
var densityCommand = cli.Command{
var densityCommand = &cli.Command{
Name: "density",
Usage: "Stress tests density of containers running on a system",
Flags: []cli.Flag{
cli.IntFlag{
&cli.IntFlag{
Name: "count",
Usage: "Number of containers to run",
Value: 10,
@@ -58,14 +58,14 @@ var densityCommand = cli.Command{
}
config := config{
Address: cliContext.GlobalString("address"),
Duration: cliContext.GlobalDuration("duration"),
Concurrency: cliContext.GlobalInt("concurrent"),
Exec: cliContext.GlobalBool("exec"),
Image: cliContext.GlobalString("image"),
JSON: cliContext.GlobalBool("json"),
Metrics: cliContext.GlobalString("metrics"),
Snapshotter: cliContext.GlobalString("snapshotter"),
Address: cliContext.String("address"),
Duration: cliContext.Duration("duration"),
Concurrency: cliContext.Int("concurrent"),
Exec: cliContext.Bool("exec"),
Image: cliContext.String("image"),
JSON: cliContext.Bool("json"),
Metrics: cliContext.String("metrics"),
Snapshotter: cliContext.String("snapshotter"),
}
client, err := config.newClient()
if err != nil {

View File

@@ -34,7 +34,7 @@ import (
"github.com/containerd/containerd/v2/plugins"
"github.com/containerd/log"
metrics "github.com/docker/go-metrics"
"github.com/urfave/cli"
"github.com/urfave/cli/v2"
)
var (
@@ -63,9 +63,10 @@ func init() {
panic(err)
}
cli.HelpFlag = cli.BoolFlag{
Name: "help, h",
Usage: "Show help",
cli.HelpFlag = &cli.BoolFlag{
Name: "help",
Aliases: []string{"h"},
Usage: "Show help",
}
}
@@ -129,85 +130,91 @@ func main() {
app.Name = "containerd-stress"
app.Description = "stress test a containerd daemon"
app.Flags = []cli.Flag{
cli.BoolFlag{
&cli.BoolFlag{
Name: "debug",
Usage: "Set debug output in the logs",
},
cli.StringFlag{
Name: "address,a",
Value: "/run/containerd/containerd.sock",
Usage: "Path to the containerd socket",
&cli.StringFlag{
Name: "address",
Aliases: []string{"a"},
Value: "/run/containerd/containerd.sock",
Usage: "Path to the containerd socket",
},
cli.IntFlag{
Name: "concurrent,c",
Value: 1,
Usage: "Set the concurrency of the stress test",
&cli.IntFlag{
Name: "concurrent",
Aliases: []string{"c"},
Value: 1,
Usage: "Set the concurrency of the stress test",
},
cli.BoolFlag{
&cli.BoolFlag{
Name: "cri",
Usage: "Utilize CRI to create pods for the stress test. This requires a runtime that matches CRI runtime handler. Example: --runtime runc",
},
cli.DurationFlag{
Name: "duration,d",
Value: 1 * time.Minute,
Usage: "Set the duration of the stress test",
&cli.DurationFlag{
Name: "duration",
Aliases: []string{"d"},
Value: 1 * time.Minute,
Usage: "Set the duration of the stress test",
},
cli.BoolFlag{
&cli.BoolFlag{
Name: "exec",
Usage: "Add execs to the stress tests (non-CRI only)",
},
cli.StringFlag{
Name: "image,i",
Value: "docker.io/library/alpine:latest",
Usage: "Image to be utilized for testing",
&cli.StringFlag{
Name: "image",
Aliases: []string{"i"},
Value: "docker.io/library/alpine:latest",
Usage: "Image to be utilized for testing",
},
cli.BoolFlag{
Name: "json,j",
Usage: "Output results in json format",
&cli.BoolFlag{
Name: "json",
Aliases: []string{"j"},
Usage: "Output results in json format",
},
cli.StringFlag{
Name: "metrics,m",
Usage: "Address to serve the metrics API",
&cli.StringFlag{
Name: "metrics",
Aliases: []string{"m"},
Usage: "Address to serve the metrics API",
},
cli.StringFlag{
&cli.StringFlag{
Name: "runtime",
Usage: "Set the runtime to stress test",
Value: plugins.RuntimeRuncV2,
},
cli.StringFlag{
&cli.StringFlag{
Name: "snapshotter",
Usage: "Set the snapshotter to use",
Value: "overlayfs",
},
}
app.Before = func(context *cli.Context) error {
if context.GlobalBool("json") {
if context.Bool("json") {
if err := log.SetLevel("warn"); err != nil {
return err
}
}
if context.GlobalBool("debug") {
if context.Bool("debug") {
if err := log.SetLevel("debug"); err != nil {
return err
}
}
return nil
}
app.Commands = []cli.Command{
app.Commands = []*cli.Command{
densityCommand,
}
app.Action = func(context *cli.Context) error {
config := config{
Address: context.GlobalString("address"),
Duration: context.GlobalDuration("duration"),
Concurrency: context.GlobalInt("concurrent"),
CRI: context.GlobalBool("cri"),
Exec: context.GlobalBool("exec"),
Image: context.GlobalString("image"),
JSON: context.GlobalBool("json"),
Metrics: context.GlobalString("metrics"),
Runtime: context.GlobalString("runtime"),
Snapshotter: context.GlobalString("snapshotter"),
Address: context.String("address"),
Duration: context.Duration("duration"),
Concurrency: context.Int("concurrent"),
CRI: context.Bool("cri"),
Exec: context.Bool("exec"),
Image: context.String("image"),
JSON: context.Bool("json"),
Metrics: context.String("metrics"),
Runtime: context.String("runtime"),
Snapshotter: context.String("snapshotter"),
}
if config.Metrics != "" {
return serve(config)