Initial commit.
All checks were successful
Build & Test / Main (push) Successful in 13s
Release / Release (push) Successful in 12s

This commit is contained in:
2024-08-25 19:03:39 -07:00
commit 046aa14c80
14 changed files with 468 additions and 0 deletions

70
cmd/economize/main.go Normal file
View File

@@ -0,0 +1,70 @@
package main
import (
"context"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"code.humancabbage.net/sam/economize/pkg/economize"
)
var rootCmd = &cobra.Command{
Use: "economize",
Short: "Control the economy server",
}
var upCmd = &cobra.Command{
Use: "up",
Short: "Bring economy server up",
RunE: func(cmd *cobra.Command, args []string) error {
return economize.Up(context.Background(), cfg)
},
}
var downCmd = &cobra.Command{
Use: "down",
Short: "Bring economy server down safely",
RunE: func(cmd *cobra.Command, args []string) error {
return economize.Down(context.Background(), cfg)
},
}
var cfgFilePath string
var cfg economize.Config
func init() {
cobra.OnInitialize(initConfig)
rootCmd.PersistentFlags().StringVarP(&cfg.Host, "host", "H", "", "IPMI host")
rootCmd.PersistentFlags().StringVarP(&cfg.Host, "cfg", "c", "./economize.yaml", "config file")
rootCmd.PersistentFlags().StringVarP(&cfg.Credentials.Username, "username", "u", "", "IPMI admin username")
rootCmd.PersistentFlags().StringVarP(&cfg.Credentials.Password, "password", "p", "", "IPMI admin password")
cobra.CheckErr(viper.BindPFlag("host", rootCmd.PersistentFlags().Lookup("host")))
cobra.CheckErr(viper.BindPFlag("username", rootCmd.PersistentFlags().Lookup("username")))
cobra.CheckErr(viper.BindPFlag("password", rootCmd.PersistentFlags().Lookup("password")))
rootCmd.AddCommand(upCmd)
rootCmd.AddCommand(downCmd)
}
func initConfig() {
if cfgFilePath != "" {
viper.SetConfigFile(cfgFilePath)
} else {
viper.SetConfigFile("economize.yaml")
}
viper.AutomaticEnv()
if err := viper.ReadInConfig(); err != nil {
cobra.CheckErr(err)
}
cfg.Host = viper.GetString("host")
cfg.Credentials.Username = viper.GetString("credentials.username")
cfg.Credentials.Password = viper.GetString("credentials.password")
}
func main() {
if err := rootCmd.Execute(); err != nil {
panic(err)
}
}