Files
warewulf/internal/app/wwctl/root.go
Christian Goll ff10bc95bb const string for Version, Release, Confversion
The Version (e,g, 4.4 ), Release (git hash) and Confversion (e.g. 44)
must be compiled into the code so that they can't be changed during run
time and ensure this with the compiler

Signed-off-by: Christian Goll <cgoll@suse.com>
2024-02-17 10:22:44 -07:00

96 lines
3.4 KiB
Go

package wwctl
import (
"os"
"github.com/spf13/cobra"
"github.com/warewulf/warewulf/internal/app/wwctl/configure"
"github.com/warewulf/warewulf/internal/app/wwctl/container"
"github.com/warewulf/warewulf/internal/app/wwctl/genconf"
"github.com/warewulf/warewulf/internal/app/wwctl/kernel"
"github.com/warewulf/warewulf/internal/app/wwctl/node"
"github.com/warewulf/warewulf/internal/app/wwctl/overlay"
"github.com/warewulf/warewulf/internal/app/wwctl/power"
"github.com/warewulf/warewulf/internal/app/wwctl/profile"
"github.com/warewulf/warewulf/internal/app/wwctl/server"
"github.com/warewulf/warewulf/internal/app/wwctl/ssh"
"github.com/warewulf/warewulf/internal/app/wwctl/version"
warewulfconf "github.com/warewulf/warewulf/internal/pkg/config"
"github.com/warewulf/warewulf/internal/pkg/help"
"github.com/warewulf/warewulf/internal/pkg/wwlog"
)
var (
rootCmd = &cobra.Command{
DisableFlagsInUseLine: true,
Use: "wwctl COMMAND [OPTIONS]",
Short: "Warewulf Control",
Long: "Control interface to the Warewulf Cluster Provisioning System.",
PersistentPreRunE: rootPersistentPreRunE,
SilenceUsage: true,
SilenceErrors: true,
}
verboseArg bool
DebugFlag bool
LogLevel int
WarewulfConfArg string
AllowEmptyConf bool
)
func init() {
rootCmd.PersistentFlags().BoolVarP(&verboseArg, "verbose", "v", false, "Run with increased verbosity.")
rootCmd.PersistentFlags().BoolVarP(&DebugFlag, "debug", "d", false, "Run with debugging messages enabled.")
rootCmd.PersistentFlags().IntVar(&LogLevel, "loglevel", wwlog.INFO, "Set log level to given string")
_ = rootCmd.PersistentFlags().MarkHidden("loglevel")
rootCmd.PersistentFlags().StringVar(&WarewulfConfArg, "warewulfconf", "", "Set the warewulf configuration file")
rootCmd.PersistentFlags().BoolVar(&AllowEmptyConf, "emptyconf", false, "Allow empty configuration")
_ = rootCmd.PersistentFlags().MarkHidden("emptyconf")
rootCmd.SetUsageTemplate(help.UsageTemplate)
rootCmd.SetHelpTemplate(help.HelpTemplate)
rootCmd.AddCommand(overlay.GetCommand())
rootCmd.AddCommand(container.GetCommand())
rootCmd.AddCommand(node.GetCommand())
rootCmd.AddCommand(kernel.GetCommand())
rootCmd.AddCommand(power.GetCommand())
rootCmd.AddCommand(profile.GetCommand())
rootCmd.AddCommand(configure.GetCommand())
rootCmd.AddCommand(server.GetCommand())
rootCmd.AddCommand(version.GetCommand())
rootCmd.AddCommand(ssh.GetCommand())
rootCmd.AddCommand(genconf.GetCommand())
}
// GetRootCommand returns the root cobra.Command for the application.
func GetRootCommand() *cobra.Command {
return rootCmd
}
func rootPersistentPreRunE(cmd *cobra.Command, args []string) (err error) {
if DebugFlag {
wwlog.SetLogLevel(wwlog.DEBUG)
} else if verboseArg {
wwlog.SetLogLevel(wwlog.VERBOSE)
} else {
wwlog.SetLogLevel(wwlog.INFO)
}
if LogLevel != wwlog.INFO {
wwlog.SetLogLevel(LogLevel)
}
conf := warewulfconf.Get()
if !AllowEmptyConf && !conf.InitializedFromFile() {
if WarewulfConfArg != "" {
err = conf.Read(WarewulfConfArg)
} else if os.Getenv("WAREWULFCONF") != "" {
err = conf.Read(os.Getenv("WAREWULFCONF"))
} else {
err = conf.Read(warewulfconf.ConfigFile)
}
}
if err != nil {
wwlog.Error("version: %s relase: %s WW_INTERNAL: %s", warewulfconf.Version, warewulfconf.Release, warewulfconf.Confversion)
return
}
err = conf.SetDynamicDefaults()
return
}