/** # Copyright (c) 2024, HCUOpt CORPORATION. All rights reserved. **/ package main import ( "dcu-container-toolkit/cmd/dcu-cdi-hook/commands" "dcu-container-toolkit/internal/info" "os" "github.com/sirupsen/logrus" cli "github.com/urfave/cli/v2" ) // options defines the options that can be set for the CLI through config files, // environment variables, or command line flags type options struct { // Debug indicates whether the CLI is started in "debug" mode Debug bool // Quiet indicates whether the CLI is started in "quiet" mode Quiet bool } func main() { logger := logrus.New() // Create a options struct to hold the parsed environment variables or command line flags opts := options{} // Create the top-level CLI c := cli.NewApp() c.Name = "C-3000 DTK CDI Hook" c.UseShortOptionHandling = true c.EnableBashCompletion = true c.Usage = "Command to structure files for usage inside a container, called as hooks from a container runtime, defined in a CDI yaml file" c.Version = info.GetVersionString() // Setup the flags for this command c.Flags = []cli.Flag{ &cli.BoolFlag{ Name: "debug", Aliases: []string{"d"}, Usage: "Enable debug-level logging", Destination: &opts.Debug, EnvVars: []string{"DTK_CDI_DEBUG"}, }, &cli.BoolFlag{ Name: "quiet", Usage: "Suppress all output except for errors; overrides --debug", Destination: &opts.Quiet, EnvVars: []string{"DTK_CDI_QUIET"}, }, } // Set log-level for all subcommands c.Before = func(c *cli.Context) error { logLevel := logrus.InfoLevel if opts.Debug { logLevel = logrus.DebugLevel } if opts.Quiet { logLevel = logrus.ErrorLevel } logger.SetLevel(logLevel) return nil } // Define the subcommands c.Commands = commands.New(logger) // Run the CLI err := c.Run(os.Args) if err != nil { logger.Errorf("%v", err) os.Exit(1) } }