package cmds import ( "errors" "fmt" "os" "runtime" "github.com/rancher/k3s/pkg/version" "github.com/sirupsen/logrus" "github.com/urfave/cli" ) var ( Debug bool DebugFlag = cli.BoolFlag{ Name: "debug", Usage: "(logging) Turn on debug logs", Destination: &Debug, EnvVar: version.ProgramUpper + "_DEBUG", } ) var ErrCommandNoArgs = errors.New("this command does not take any arguments") func init() { // hack - force "file,dns" lookup order if go dns is used if os.Getenv("RES_OPTIONS") == "" { os.Setenv("RES_OPTIONS", " ") } } func NewApp() *cli.App { app := cli.NewApp() app.Name = appName app.Usage = "Kubernetes, but small and simple" app.Version = fmt.Sprintf("%s (%s)", version.Version, version.GitCommit) cli.VersionPrinter = func(c *cli.Context) { fmt.Printf("%s version %s\n", app.Name, app.Version) fmt.Printf("go version %s\n", runtime.Version()) } app.Flags = []cli.Flag{ DebugFlag, cli.StringFlag{ Name: "data-dir,d", Usage: "(data) Folder to hold state default /var/lib/rancher/" + version.Program + " or ${HOME}/.rancher/" + version.Program + " if not root", }, } app.Before = SetupDebug(nil) return app } func SetupDebug(next func(ctx *cli.Context) error) func(ctx *cli.Context) error { return func(ctx *cli.Context) error { if Debug { logrus.SetLevel(logrus.DebugLevel) } if next != nil { return next(ctx) } return nil } }